我正在尝试从钩子API FileInformation
调用中将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
中),然后更改目的地文件名(我认为此信息相应地位于ZwSetInformationFile
中。
拦截此类文件重命名操作的正确方法是什么?