NtQuerySymbolicLinkObject

NTSTATUS __stdcall NtQuerySymbolicLinkObject(VOID *LinkHandle, _UNICODE_STRING *LinkTarget, UINT64 *ReturnedLength){
  char PreviousMode; 
  __int64 v7; 
  __int64 p_MaximumLength; 
  __int64 v9; 
  _ETHREAD *CurrentThread; 
  char *v11; 
  int v12; 
  size_t v13; 
  PVOID Object; 
  ULONG_PTR PushLock[2]; 
  VOID *Src[2]; 
  VOID *v18[2]; 
  int v19; 

  *(_OWORD *)v18 = 0i64;
  *(_OWORD *)Src = 0i64;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
  {
    if( ((unsigned __int8)LinkTarget & 1) != 0 )
      ExRaiseDatatypeMisalignment();
    v7 = (__int64)LinkTarget;
    if( (unsigned __int64)LinkTarget >= 0x7FFFFFFF0000i64 )
      v7 = 0x7FFFFFFF0000i64;
    *(_WORD *)v7 = *(_WORD *)v7;
    p_MaximumLength = (__int64)&LinkTarget->MaximumLength;
    if( (unsigned __int64)&LinkTarget->MaximumLength >= 0x7FFFFFFF0000i64 )
      p_MaximumLength = 0x7FFFFFFF0000i64;
    *(_WORD *)p_MaximumLength = *(_WORD *)p_MaximumLength;
    *(_UNICODE_STRING *)v18 = *LinkTarget;
    ProbeForWrite(_mm_srli_si128(*(__m128i *)v18, 8).m128i_u64[0], WORD1(v18[0]), 1i64);
    if( ReturnedLength )
    {
      v9 = (__int64)ReturnedLength;
      if( (unsigned __int64)ReturnedLength >= 0x7FFFFFFF0000i64 )
        v9 = 0x7FFFFFFF0000i64;
      *(_DWORD *)v9 = *(_DWORD *)v9;
    }
  }
  else
  {
    *(_UNICODE_STRING *)v18 = *LinkTarget;
  }
  Object = 0i64;
  v19 = ObReferenceObjectByHandle(LinkHandle, 1ui64, ObjectType, PreviousMode, &Object, 0i64);
  if( v19 >= 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    v11 = (char *)Object;
    *(_QWORD *)PushLock = (char *)Object - 32;
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)Object - 4, 0i64);
    if( (*((_DWORD *)v11 + 7) & 0x10) != 0 )
      RtlInitUnicodeString((PUNICODE_STRING)Src, (PCWSTR)&dword_1407CF120);
    else
      *(_OWORD *)Src = *(_OWORD *)(v11 + 8);
    v12 = (int)Src[0];
    if( ReturnedLength )
    {
      if( WORD1(Src[0]) <= WORD1(v18[0]) )
      {
        v13 = WORD1(Src[0]);
LABEL_18:
        memmove(v18[1], Src[1], v13);
        LinkTarget->Length = v12;
        if( ReturnedLength )
          *(_DWORD *)ReturnedLength = HIWORD(v12);
LABEL_20:
        ExReleasePushLockEx(PushLock[0], 0);
        KeLeaveCriticalRegionThread(KeGetCurrentThread());
        HalPutDmaAdapter((PADAPTER_OBJECT)Object);
        return v19;
      }
    }
    else if( LOWORD(Src[0]) <= WORD1(v18[0]) )
    {
      v13 = LOWORD(Src[0]);
      goto LABEL_18;
    }
    v19 = -1073741789;
    if( ReturnedLength )
      *(_DWORD *)ReturnedLength = WORD1(Src[0]);
    goto LABEL_20;
  }
  return v19;
}

Referenced by:

AdtpInitializeDriveLetters
IopReassignSystemRoot
IopStoreSystemPartitionInformation