如何在 C 中将字符串添加到 PUNICODE_STRING 的末尾

How to add a string to the end of a PUNICODE_STRING in C

我正在尝试修改现有的 C 迷你过滤器驱动程序,但对 C 的经验非常有限。我的函数接收两个 PUNICODE_STRING 文件系统上文件的两个路径。

 _In_  PUNICODE_STRING       SourceFile,
 _In_  PUNICODE_STRING       TargetFile,

我需要创建一个新的 PUNICODE_STRING(称为 NewTargetFile),然后在 NewTargetFile 的末尾附加“.xy”,而不是覆盖 TargetFile。

我假设一个明智的方法是定义一个新的 PUNICODE_STRING 并将 TargetFile 复制到 NewTargetFile。然后将字符串追加到末尾。但我显然超出了我的理解范围!因为我只得到一个空白值。

PUNICODE_STRING NewTargetFile = { 0 };

NewTargetFile = TargetFile;
NT_IF_FAIL_LEAVE(RtlAppendUnicodeToString(NewTargetFile, (PCWSTR)'.ta'));

所以简而言之,如果我的函数收到 "filename.txt" 的 TargetFile,我需要生成一个 PUNICODE_STRING,其值为 "filename.txt.xy"

通过分配 NewTargetFile = TargetFile;,您只是在复制指针。在 NewTargetFile 上执行的每个操作都将在 TargetFile.

上执行

你需要为NewTargetFile创建一个单独的UNICODE_STRING,并使用RtlUnicodeStringInit() function, then you need to use the RtlUnicodeStringCopy()函数初始化它,将TargetFile复制到NewTargetFile。最后,你可以使用 RtlAppendUnicodeToString().

类似于:

PUNICODE_STRING NewTargetFile = { 0 };
NTSTRSAFEDDI status; 
// NewTargetFile = TargetFile;
status = RtlUnicodeStringInit(
    NewTargetFile,
    (NTSTRSAFE_PCWSTR) "[=10=]"
);
// check status ...
status = RtlUnicodeStringCopy(
    NewTargetFile,
    TargetFile
);
// check status ...
NT_IF_FAIL_LEAVE(RtlAppendUnicodeToString(NewTargetFile, (PCWSTR)'.ta'));

我没有尝试代码,但这似乎是问题所在。

希望对您有所帮助。