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

Сообщение 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 — это ведь даже много для пути к файлу, да и перед этим он логируется и видно, что там отнюдь не столько.