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

标签 c unicode-string

我正在尝试修改现有的 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,我需要生成一个值为“filename.txt.xy”的 PUNICODE_STRING

最佳答案

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

您需要为 NewTargetFile 创建一个单独的 UNICODE_STRING 并使用 RtlUnicodeStringInit() 初始化它功能,那么你需要使用RtlUnicodeStringCopy()TargetFile 复制到 NewTargetFile 的函数。最后,您可以使用 RtlAppendUnicodeToString()

类似于:

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

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

希望这对您有所帮助。

关于c - 如何在 C 中将字符串添加到 PUNICODE_STRING 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149715/

相关文章:

c - hash_add 使系统崩溃

c++ - 为什么结构和 union 之间存在大小不匹配?

php - Unicode 到 PHP 中的字符转换器

regex - 返回非字符串输出的 String.replace 函数

cocoa-touch - UITextField 切断 Unicode 字符的下行

Python unicode 搜索没有给出正确答案

c++ - 包装 C 或 C++ 库的优点和缺点是什么

java - 处理对 dll 函数的多重访问

c - 为不同签名的函数生成 C 代码,但实现相同

excel - 从 GridView 导出到 Excel 无法正确显示波斯语