NtDisplayString

INT64 __fastcall NtDisplayString(_UNICODE_STRING *String){
  INT8 v3; 
  __int64 v4; 
  UINT8 *v5; 
  unsigned __int64 v6; 
  UINT8 *PoolWithTag; 
  WCHAR *v8; 
  wchar_t *Buffer; 
  __int64 MaximumLength; 
  UINT8 *v11; 
  UINT8 v12; 
  int P; 
  if( !String )
    return 3221225485i64;
  v3 = *((_BYTE *)KeGetCurrentThread() + 562);
  if( !SeSinglePrivilegeCheck(*(_QWORD *)&SeTcbPrivilege, v3) )
    return 3221225569i64;
  if( v3 )
  {
    v4 = 0x7FFFFFFF0000i64;
    if( (unsigned __int64)String < 0x7FFFFFFF0000i64 )
      v4 = (__int64)String;
    P = *(_DWORD *)v4;
    v5 = *(UINT8 **)(v4 + 8);
    if( !v5 || !HIWORD(*(_DWORD *)v4) )
      return 0i64;
    v6 = (unsigned __int64)&v5[HIWORD(P)];
    if( v6 > 0x7FFFFFFF0000i64 || v6 < (unsigned __int64)v5 )
      MEMORY[0x7FFFFFFF0000] = 0;
    if( !*(_WORD *)v5 )
      return 0i64;
    PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, HIWORD(P) + 2i64, 0x67727453ui64);
    v8 = (WCHAR *)PoolWithTag;
    if( PoolWithTag )
    {
      memmove(PoolWithTag, v5, HIWORD(P));
      v8[(unsigned __int64)HIWORD(P) >> 1] = 0;
      goto LABEL_24;
    }
    return 3221225495i64;
  }
  Buffer = String->Buffer;
  if( !Buffer )
    return 0i64;
  MaximumLength = String->MaximumLength;
  if( !(_WORD)MaximumLength || !*Buffer )
    return 0i64;
  v11 = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, MaximumLength + 2, 0x67727453ui64);
  v8 = (WCHAR *)v11;
  if( !v11 )
    return 3221225495i64;
  memmove(v11, (UINT8 *)String->Buffer, String->MaximumLength);
  v8[(unsigned __int64)String->MaximumLength >> 1] = 0;
LABEL_24:
  v12 = BgkDisplayStringEx(v8);
  ExFreePoolWithTag(v8, 0);
  if( !v12 )
    return 3221225473i64;
  return 0i64;
}

Referenced by:

No references.