Информация об изменениях

Сообщение FS Minifilter, IRP_MJ_CREATE. Кривой FileName? от 08.01.2018 5:21

Изменено 08.01.2018 5:26 sergey77666

FS Minifilter, IRP_MJ_CREATE. Как работать с FileName, он ка
Примерно такой код
FLT_POSTOP_CALLBACK_STATUS PostFileOperationCallback ( IN OUT PFLT_CALLBACK_DATA Data,
IN PCFLT_RELATED_OBJECTS FltObjects,
IN PVOID CompletionContext,
IN FLT_POST_OPERATION_FLAGS Flags) {
..
FILE_OBJECT pFileObject;
PWCHAR bufPFO = NULL;
..
if (Data != NULL && Data->Iopb != NULL && !(Data->Iopb->Parameters.Create.Options & FILE_DIRECTORY_FILE)) {

if (Data->Iopb->TargetFileObject != NULL)
{
pFileObject = *Data->Iopb->TargetFileObject;
if (Data->IoStatus.Information == FILE_CREATED && pFileObject.FileName.Length > 0)
{
..
bufPFO = (PWCHAR)ExAllocatePoolWithTag(NonPagedPool, sizeof(WCHAR) * 1024, 'NC__');
for (iii = 0; iii < 1024; iii++)
{
bufPFO[iii] = 0;
}
res = RtlStringCchPrintfW(bufPFO, 1024, L"%wZ", pFileObject.FileName);

И вот на этом самом месте, где RtlStringCchPrintfW, иногда происходит ерунда. Обычно это было, когда я запускал Edge и пытался им скачать и запустить ChromeSetup.exe
То BSOD, то buffer overflow (хотя 1024 — это ведь даже много для пути к файлу, да и перед этим он логируется и видно, что там отнюдь не столько.
FS Minifilter, IRP_MJ_CREATE. Кривой FileName
Примерно такой код
FLT_POSTOP_CALLBACK_STATUS PostFileOperationCallback ( IN OUT PFLT_CALLBACK_DATA Data,
IN PCFLT_RELATED_OBJECTS FltObjects,
IN PVOID CompletionContext,
IN FLT_POST_OPERATION_FLAGS Flags) {
..
FILE_OBJECT pFileObject;
PWCHAR bufPFO = NULL;
..
if (Data != NULL && Data->Iopb != NULL && !(Data->Iopb->Parameters.Create.Options & FILE_DIRECTORY_FILE)) {

if (Data->Iopb->TargetFileObject != NULL)
{
pFileObject = *Data->Iopb->TargetFileObject;
if (Data->IoStatus.Information == FILE_CREATED && pFileObject.FileName.Length > 0)
{
..
bufPFO = (PWCHAR)ExAllocatePoolWithTag(NonPagedPool, sizeof(WCHAR) * 1024, 'NC__');
for (iii = 0; iii < 1024; iii++)
{
bufPFO[iii] = 0;
}
res = RtlStringCchPrintfW(bufPFO, 1024, L"%wZ", pFileObject.FileName);

И вот на этом самом месте, где RtlStringCchPrintfW, иногда происходит ерунда. Обычно это было, когда я запускал Edge и пытался им скачать и запустить ChromeSetup.exe
То BSOD, то buffer overflow (хотя 1024 — это ведь даже много для пути к файлу, да и перед этим он логируется и видно, что там отнюдь не столько.