ZwCreateFile - как успеть при BSOD?
От: sergey77666 Марс  
Дата: 03.01.18 19:47
Оценка:
как сделать, чтобы выполнение не продолжалось, пока он реально не создаст файл?
LARGE_INTEGER       AllocationSize;
UNICODE_STRING      LogFileName;
IO_STATUS_BLOCK     IoStatusBlock;
OBJECT_ATTRIBUTES   ObjectAttributes;

HANDLE              LogFileHandle;
NTSTATUS Status;

//
// Open the Log File for writing.
//
RtlInitUnicodeString(L"\\??\\C:\\FP_1.log", fullPath);
InitializeObjectAttributes(
    &ObjectAttributes,
    &LogFileName,
    OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
    NULL,
    NULL
);
Status = ZwCreateFile(
    &LogFileHandle,
    GENERIC_WRITE,
    &ObjectAttributes,
    &IoStatusBlock,
    NULL,
    FILE_ATTRIBUTE_NORMAL,
    0,
    FILE_OVERWRITE_IF,
    FILE_SYNCHRONOUS_IO_NONALERT,
    NULL,
    0
);

ZwClose(LogFileHandle);


Если запустить как обычно, то файл создается.

Но если ПОСЛЕ этих строк будет нечто, провоцирующее BSOD — то потом обнаруживается, что файла нет.

Получается, сперва код продолжает выполнение, а затем файл создается фактически.

Как исправить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.