FsRtlpRegisterUncProvider

VOID FsRtlpRegisterUncProvider(INT64 a1, INT64 a2, INT64 a3, INT64 a4, INT64 a5, INT64 a6, ...){
  LPWSTR v10; 
  HANDLE Handle; 
  Handle = (HANDLE)-1i64;
  if( a1 && *(_QWORD *)(a1 + 8) && *(_WORD *)a1 && *(_WORD *)(a1 + 2) && (*(_WORD *)(a3 + 2) < 0x101u || a2) )
  {
    KeWaitForSingleObject(&FsRtlpUncSemaphore, Executive, 0, 0, 0i64);
    if( FsRtlpOpenDev(&Handle, v10) < 0 || (int)FsRtlpRegisterProviderWithMUP(Handle, (const void **)a1, a2, a3) < 0 )
    {
      if( (char *)Handle - 1 <= (char *)0xFFFFFFFFFFFFFFFDi64 )
        ZwClose(Handle);
      *(_QWORD *)a4 = -1i64;
    }
    else
    {
      ++FsRtlpRedirs;
      *(_QWORD *)a4 = Handle;
    }
    KeReleaseSemaphore(&FsRtlpUncSemaphore, 0i64, 1i64, 0);
  }
  else
  {
    *(_QWORD *)a4 = -1i64;
  }
}

Referenced by:

FsRtlRegisterUncProviderEx