我最近一直在研究使用WDK(Windows驱动程序工具包)创建miniFilter。我正在努力为C找到良好的Api参考。例如,我想以下列格式创建一个目录,但找不到任何引用以及如何执行任何引用。
UNICODE_STRING的格式 - > ' \设备\ HarddiskVolume4 \用户\ WDKRemoteUser \桌面'
对于那些用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示例中获取了一个用于创建文件的副本,并根据我认为创建目录的方式对其进行了修改。
由于
答案 0 :(得分:0)
要回答问题并确认下面的工作代码,还在句柄上添加了ZwClose。感谢每个人的评论
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,
&ObjectAttributes,
&iosb,
0,
FILE_ATTRIBUTE_NORMAL| SYNCHRONIZE,
FILE_SHARE_WRITE | FILE_SHARE_READ,
FILE_CREATE,
FILE_DIRECTORY_FILE,
NULL,
0
);
if (FileHandle) {
ZwClose(FileHandle);
}
return Status;
}