【发布时间】:2018-04-10 06:55:39
【问题描述】:
我最近一直在研究使用 WDK(Windows 驱动程序套件)创建一个 miniFilter。我正在努力为 C 找到好的 Api 参考。例如,我想创建一个以下格式的目录,但找不到任何参考以及如何做。
UNICODE_STRING 的格式 -> '\Device\HarddiskVolume4\Users\WDKRemoteUser\Desktop'
对于那些使用 C 开发的人,我向你们致敬。
B.n 我在 Visual Studio 2017 中进行所有开发
好的,我已经创建了一个函数:
NTSTATUS create_directory(UNICODE_STRING dirName) {
IO_STATUS_BLOCK iosb;
OBJECT_ATTRIBUTES ObjectAttributes;
NTSTATUS Status;
HANDLE FileHandle = NULL;
FILE_OBJECT *FileObj;
DbgPrint("Directory :- '%wZ'", &dirName);
InitializeObjectAttributes(
&ObjectAttributes,
&dirName,
(OBJ_CASE_INSENSITIVE |
OBJ_KERNEL_HANDLE),
NULL,
NULL
);
Status = ZwCreateFile(
&FileHandle,
GENERIC_READ | SYNCHRONIZE,
&ObjectAttributes,
&iosb,
0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_WRITE | FILE_SHARE_READ,
FILE_OPEN,
FILE_DIRECTORY_FILE,
NULL,
0
);
return Status;
}
我想我已经正确地遵循了https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/wdm/nf-wdm-zwcreatefile的语法
但它似乎没有创建目录,猜测我得到的参数之一略有错误。
我从一个用于创建文件的 MS 示例中获取了一份副本,并对其进行了修改以创建一个目录。
谢谢
【问题讨论】:
-
这就是我尝试过的:google "c win32 mkdir" 两跳后我登陆MSDN: _mkdir, _wmkdir。如果我没记错的话,Win32 的
w函数期望 UTF-16 (但您可以验证这一点)。顺便提一句。'\Device\HarddiskVolume4\Users\WDKRemoteUser\Desktop'也应该与非w一起使用——这些都是 ASCII 字符。) -
好的,谢谢,看起来很合适,项目找到了 direct.h,我需要尝试在搜索中包含 win32。我一直在寻找 C++ 示例
-
IoCreateFile或ZwCreateFile(取决于之前的模式) -
@Scheff -
_mkdir()的较低级别是ZwCreateFile -
抱歉,我没有机会回答我自己的问题。我现在知道未来。