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 に答える