zoukankan      html  css  js  c++  java
  • 关于RtlInitUnicodeString感想

    01 VOID RtlInitUnicodeString (OUT PUNICODE_STRING DestinationString,IN PCWSTR SourceString OPTIONAL)
    02 {
    03     SIZE_T Length;
    04     DestinationString->MaximumLength = 0;
    05     DestinationString->Length = 0;
    06     DestinationString->Buffer = (PWSTR)SourceString;
    07     if (ARGUMENT_PRESENT(SourceString))
    08     {
    09         Length = wcslen(SourceString) * sizeof(WCHAR);
    10         ASSERT(Length < MAX_USTRING);
    11         if(Length >= MAX_USTRING)
    12         {
    13             Length = MAX_USTRING - sizeof(UNICODE_NULL);
    14         }
    15         DestinationString->Length = (USHORT)Length;
    16         DestinationString->MaximumLength = (USHORT)(Length + sizeof(UNICODE_NULL));
    17     }
    18     return;
    19 }
    20  
    21 NTSTATUS RtlInitUnicodeStringEx ( OUT PUNICODE_STRING DestinationString,IN PCWSTR SourceString OPTIONAL)
    22 {
    23     SIZE_T Length;
    24     DestinationString->Length = 0;
    25     DestinationString->MaximumLength = 0;
    26     DestinationString->Buffer = (PWSTR)SourceString;
    27     if (ARGUMENT_PRESENT(SourceString))
    28     {
    29         Length = wcslen(SourceString);
    30         // We are actually limited to 32765 characters since we want to store a meaningful MaximumLength also.
    31         if (Length > (UNICODE_STRING_MAX_CHARS - 1))
    32         {
    33             return STATUS_NAME_TOO_LONG;
    34         }
    35         Length *= sizeof(WCHAR);
    36         DestinationString->Length = (USHORT)Length;
    37         DestinationString->MaximumLength = (USHORT)(Length + sizeof(WCHAR));
    38     }
    39     return STATUS_SUCCESS;
    40 }



    从以上代码可见,这2个函数会将传入的字符串指针直接赋值给结构体,这样的话,如果传入的是栈字符串,那么UNICODE_STIRNG只能在当前域内使用,不能存储到其他生命周期更长的地方,否则栈恢复以后读取到不正确的数据,
    然而传入一个全局字符串是可以的,例如:

    UNICODE_STRING str1;
    void func()
    {
      WCHAR buf[]=L"lich";
      RtlInitUnicodeString(&str1,buf);
    }
    这是错误写法

    https://www.0xaa55.com/forum.php?mod=viewthread&tid=1371&extra=page%3D6

  • 相关阅读:
    URL中传参带有%2F等特殊字符
    js根据对象数组中某一属性值,合并相同项,并对某一属性累加处理
    windows传输文件到linux
    npm 切换源
    linux下安装java
    PowerShell:因为在此系统上禁止运行脚本,解决方法
    wget: 未找到命令
    发货通知单禁止手工新增
    固定提前期
    容差码
  • 原文地址:https://www.cnblogs.com/findumars/p/5557156.html
Copyright © 2011-2022 走看看