Windows Rtl字符串相关接口源码

//定义ansi字符串
VOID NTAPI
RtlInitAnsiString(                                                                                                                                  

 IN OUT PANSI_STRING DestinationString,
 IN PCSTR SourceString)
{
 SIZE_T DestSize;

 if(SourceString)
 {
  DestSize = strlen(SourceString);
  DestinationString->Length = (USHORT)DestSize;
  DestinationString->MaximumLength = (USHORT)DestSize + sizeof(CHAR);
 }
 else
 {
  DestinationString->Length = 0;
  DestinationString->MaximumLength = 0;
 }

 DestinationString->Buffer = (PCHAR)SourceString;
}

 

//定义unicode字符串
/*
 * @implemented
 *
 * NOTES
 *  If source is NULL the length of source is assumed to be 0.
 */
VOID NTAPI
RtlInitUnicodeString(                                                                                                                                      
 IN OUT PUNICODE_STRING DestinationString,
 IN PCWSTR SourceString)
{
 SIZE_T DestSize;

 if(SourceString)
 {
  DestSize = strlenW(SourceString) * sizeof(WCHAR);
  DestinationString->Length = (USHORT)DestSize;
  DestinationString->MaximumLength = (USHORT)DestSize + sizeof(WCHAR);
 }
 else
 {
  DestinationString->Length = 0;
  DestinationString->MaximumLength = 0;
 }

 DestinationString->Buffer = (PWCHAR)SourceString;
}

 

//将Ansi字符串转换成unicode字符串

NTSTATUS NTAPI
RtlAnsiStringToUnicodeString(                                                                                 
 IN OUT PUNICODE_STRING UniDest,
 IN PANSI_STRING AnsiSource,
 IN BOOLEAN AllocateDestinationString)
{
 ULONG Length;
 PUCHAR WideString;
 USHORT i;

 Length = AnsiSource->Length * sizeof(WCHAR);
 if (Length > MAXUSHORT) return STATUS_INVALID_PARAMETER_2;
 UniDest->Length = (USHORT)Length;

 if (AllocateDestinationString)
 {
  UniDest->MaximumLength = (USHORT)Length + sizeof(WCHAR);
  UniDest->Buffer = (PWSTR) malloc(UniDest->MaximumLength);
  if (!UniDest->Buffer)
   return STATUS_NO_MEMORY;
 }
 else if (UniDest->Length >= UniDest->MaximumLength)
 {
  return STATUS_BUFFER_OVERFLOW;
 }

 WideString = (PUCHAR)UniDest->Buffer;
 for (i = 0; i <= AnsiSource->Length; i++)
 {
  WideString[2 * i + 0] = AnsiSource->Buffer[i];
  WideString[2 * i + 1] = 0;
 }
 return STATUS_SUCCESS;
}

 

//将unicode字符串转成大写
WCHAR NTAPI
RtlUpcaseUnicodeChar(                                                                                    
 IN WCHAR Source)
{
 USHORT Offset;

 if (Source < 'a')
  return Source;

 if (Source <= 'z')
  return (Source - ('a' - 'A'));

 Offset = 0;

 return Source + (SHORT)Offset;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值