Я пытаюсь открыть файл .evtx на компьютере под управлением Windows 7 x64 с помощью функции OpenBackupEventLog , однако продолжаю получать ERROR_FILE_NOT_FOUND (код ошибки 2), даже если файл существует .
Моя декларация P / Invoke / точка, где я вызываю файл:
[DllImport("advapi32.dll", SetLastError = true, ExactSpelling = false, EntryPoint = "OpenBackupEventLog")]
public static extern IntPtr OpenBackupEventLog(
[MarshalAs(UnmanagedType.LPTStr)]string uncServerName,
[MarshalAs(UnmanagedType.LPTStr)]string fileName);
IntPtr ptr = NativeMethods.OpenBackupEventLog(null, filename);
if (ptr == IntPtr.Zero && File.Exists(filename))
{
// This exception is thrown and so the file does exist
throw new Win32Exception(string.Format("Failed to open event log archive '{0}'", filename));
}
Обратите внимание, что это внутри процесса x86.
Единственное, о чем я могу думать, это то, что проблема связана с маршаллингом Unicode / ANSI (ранее я вспоминал, что получил ERROR_INVALID_PARAMETER
), однако я дважды проверил, и игра с маршаллингом не имеет никакого эффекта.
Почему это не удается открыть файл / как я могу это диагностировать?