【问题标题】:How to add a string to the end of a PUNICODE_STRING in C如何在 C 中将字符串添加到 PUNICODE_STRING 的末尾
【发布时间】:2019-07-22 15:57:18
【问题描述】:

我正在尝试修改现有的 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”

【问题讨论】:

  • (PCWSTR)'.ta' 无效,请改用L".ta"

标签: c unicode-string


【解决方案1】:

通过分配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'));

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

希望对您有所帮助。

【讨论】:

  • 谢谢托尼,这真的很有帮助。现在我只需要解决这些蓝屏问题,但我想我没有分配足够的空间或其他东西。
  • PUNICODE_STRING 只是一个指针,您需要先分配一个实际的UNICODE_STRING 指向,然后才能初始化它。为此使用RtlCreateUnicodeString()。另请注意,与您提到的其他 RtlUnicodeString...() 函数在同一 Ntstrsafe 库中有一个 RtlUnicodeStringCat() 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
相关资源
最近更新 更多