UNICODE_STRING到std字符串转换

时间:2013-03-21 14:38:18

标签: windows driver kernel-mode filter-driver

我正在使用 pFileObject-> FileName 来获取在内核模式过滤器驱动程序中打开的文件名。此文件名以 {{3}的形式返回} 即可。我想将其转换为 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);
}

1 个答案:

答案 0 :(得分:2)

我同意汉斯的评论。使std :: classes在Windows内核模式下工作即使不是不可能也是非常困难的。默认的WinDDK环境是C而不是C ++。您最好的办法是将UNICODE_STRING转换为ANSI以null结尾的字符串。 (您可以使用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
相关问题