RtlUnicodeStringToInt64

INT64 __fastcall RtlUnicodeStringToInt64(const _UNICODE_STRING *String, UINT64 Base, INT64 *Number, WCHAR **EndPointer){
  __int64 Length; 
  unsigned int v6; 
  wchar_t *Buffer; 
  unsigned __int64 MaximumLength; 
  WCHAR *v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  INT64 flags; 
  INT64 error; 
  WCHAR *endptr; 
  UINT8 dst[2]; 
  Length = String->Length;
  v6 = Base;
  Buffer = String->Buffer;
  MaximumLength = String->MaximumLength;
  endptr = 0i64;
  v11 = Buffer;
  if( MaximumLength < Length + 2 || Buffer[((unsigned __int64)(unsigned int)MaximumLength >> 1) - 1] )
  {
    v11 = (WCHAR *)dst;
    v12 = (unsigned int)Length >> 1;
    if( (unsigned int)v12 >= 0x40 )
      v12 = 64i64;
    v13 = 2 * v12;
    memmove(dst, (UINT8 *)Buffer, 2 * v12);
    if( v13 >= 0x82 )
      _report_rangecheckfailure();
    *(_WORD *)&dst[v13] = 0;
  }
  LODWORD(error) = 0;
  LODWORD(flags) = 0;
  *Number = wcstoxq(0i64, v11, &endptr, v6, flags, &error);
  if( EndPointer )
    *EndPointer = &String->Buffer[endptr - v11];
  return(_DWORD)error != 0 ? 0xC0000095 : 0;
}

Referenced by:

GetFlags