0

我正在使用pFileObject->FileName来获取在内核模式过滤器驱动程序中打开的文件的名称。这个返回的文件名是UNICODE_STRING的形式。我想将其转换为std String。什么方法???如果可能,请提供示例...以下是代码

NTSTATUS FsFilterDispatchCreate(
    __in PDEVICE_OBJECT DeviceObject,
    __in PIRP           Irp
    )
{
    PFILE_OBJECT pFileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject;

    DbgPrint("%wZ\n", &pFileObject->FileName);

    return FsFilterDispatchPassThrough(DeviceObject, Irp);
}
4

1 回答 1

2

我同意汉斯的评论。使 std:: 类在 Windows 内核模式下工作即使不是不可能也是极其困难的。默认的 WinDDK 环境是 C 而不是 C++。最好的办法是将 UNICODE_STRING 转换为 ANSI 空终止字符串。(您可以使用 DbgPrint("%s"...) 等进行打印)。请参见下面的示例。

UNICODE_STRING tmp;

// ...

ANSI_STRING dest;
ULONG unicodeBufferSize = tmp.Length;
// Length of unicode string in bytes must be enough to keep ANSI string
dest.Buffer = (PCHAR)ExAllocatePool(NonPagedPool, unicodeBufferSize+1);
// check for allocation failure... 
dest.Length = 0;
dest.MaximumLength = unicodeBufferSize+1;

RtlUnicodeStringToAnsiString(&dest, &tmp, FALSE);
// check for failure...
dest.Buffer[dest.Length] = 0; // now we get it in dest.Buffer
于 2013-03-21T22:25:40.410 回答