RtlUnicodeStringToInt64

NTSTATUS __stdcall 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; 
  __int16 v18[72]; 

  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 *)v18;
    v12 = (unsigned int)Length >> 1;
    if( (unsigned int)v12 >= 0x40 )
      v12 = 64i64;
    v13 = v12;
    memmove(v18, Buffer, 2 * v12);
    if( v13 >= 65 )
      _report_rangecheckfailure();
    v18[v13] = 0;
  }
  LODWORD(error) = 0;
  LODWORD(flags) = 0;
  *Number = wcstoxq(0i64, v11, &endptr, v6, flags, &error, error, (INT64)endptr);
  if( EndPointer )
    *EndPointer = &String->Buffer[endptr - v11];
  return(_DWORD)error != 0 ? 0xC0000095 : 0;
}

Referenced by:

GetFlags