ExpStringCapture

NTSTATUS __stdcall ExpStringCapture(WCHAR **CapturedString, _UNICODE_STRING *SourceString){
  __int64 Length; 
  unsigned __int64 v5; 
  VOID *PoolWithQuotaTag; 
  wchar_t *Buffer; 

  Length = SourceString->Length;
  if( (Length & 1) != 0 || !(_WORD)Length )
    return -1073741811;
  v5 = SourceString->Length;
  PoolWithQuotaTag = ExAllocatePoolWithQuotaTag((POOL_TYPE)9, Length + 2, 0x50535845ui64);
  if( !PoolWithQuotaTag )
    return -1073741801;
  if( v5 )
  {
    Buffer = SourceString->Buffer;
    if( ((unsigned __int8)Buffer & 1) != 0 )
      ExRaiseDatatypeMisalignment();
    if( (unsigned __int64)Buffer + v5 > 0x7FFFFFFF0000i64 || (wchar_t *)((char *)Buffer + v5) < Buffer )
      MEMORY[0x7FFFFFFF0000] = 0;
  }
  memmove(PoolWithQuotaTag, SourceString->Buffer, v5);
  *((_WORD *)PoolWithQuotaTag + (v5 >> 1)) = 0;
  *CapturedString = (WCHAR *)PoolWithQuotaTag;
  return 0;
}

Referenced by:

ExpGetDeviceDataInformation