【问题标题】:Create a directory in C for Kernel driver在 C 中为内核驱动程序创建一个目录
【发布时间】: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++ 示例
  • IoCreateFileZwCreateFile(取决于之前的模式)
  • @Scheff - _mkdir() 的较低级别是 ZwCreateFile
  • 抱歉,我没有机会回答我自己的问题。我现在知道未来。

标签: c windows wdk


【解决方案1】:

为了回答问题并确认下面的工作代码还在手柄上添加了 ZwClose。感谢大家的cmets

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 2011-02-12
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多