Я пытаюсь скопировать буфер FileInformation
из перехваченного вызова API ZwQueryInformationFile
в структуру File_Rename_Information
.
Я использую приведенный ниже код, но структура заполняется случайными символами;
typedef struct _FILE_RENAME_INFORMATION {
BOOLEAN ReplaceIfExists;
HANDLE RootDirectory;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
///////////////////////////////////////////////////
// Hook Catcher = ZwQueryInformationFile_Hook
///////////////////////////////////////////////////
NTSTATUS __stdcall ZwQueryInformationFile_Hook(
IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID FileInformation,
IN ULONG Length,
IN FILE_INFORMATION_CLASS FileInformationClass)
{
if (FileInformationClass == FileRenameInfo) {
FILE_RENAME_INFORMATION*pFRI = (FILE_RENAME_INFORMATION*)malloc(Length);
memcpy(pFRI, FileInformation, Length);
}
return ZwQueryInformationFile(FileHandle, IoStatusBlock, FileInformation,
Length, FileInformationClass);
}
Результат для pFRI->FileName
выглядит следующим образом;
쳌쳌쳌쳌쳌쳌쳌쳌Ї眬
Моя конечная цель - получить и проверить имя файла source (Я считаю, что эта информация содержится в ZwQueryInformationFile
), а затем измените имя файла destination (я считаю, что эта информация содержится в ZwSetInformationFile
) соответственно.
Как правильно перехватить этот тип операции переименования файла?