FsRtlpRegisterUncProvider

NTSTATUS __stdcall FsRtlpRegisterUncProvider(
        _UNICODE_STRING *RedirDevName,
        _DEVICE_OBJECT *DeviceObject,
        _FSRTL_UNC_PROVIDER_REGISTRATION *Registration,
        VOID **MupHandle){
  LPWSTR v8; 
  int v9; 
  void *Handle; 

  Handle = (void *)-1i64;
  if( RedirDevName
    && RedirDevName->Buffer
    && RedirDevName->Length
    && RedirDevName->MaximumLength
    && (Registration->Version < 0x101u || DeviceObject) )
  {
    KeWaitForSingleObject((UINT64)&Semaphore, 0, 0, 0, 0i64);
    v9 = FsRtlpOpenDev(&Handle, v8);
    if( v9 < 0
      || (v9 = FsRtlpRegisterProviderWithMUP(Handle, (const VOID **)RedirDevName, DeviceObject, Registration), v9 < 0) )
    {
      if( (char *)Handle - 1 <= (char *)0xFFFFFFFFFFFFFFFDi64 )
        ZwClose((_HANDLE)Handle);
      *MupHandle = (VOID *)-1i64;
    }
    else
    {
      ++FsRtlpRedirs;
      *MupHandle = Handle;
    }
    KeReleaseSemaphore(&Semaphore, 0i64, 1i64, 0);
    return v9;
  }
  else
  {
    *MupHandle = (VOID *)-1i64;
    return -1073741811;
  }
}

Referenced by:

FsRtlRegisterUncProvider
FsRtlRegisterUncProviderEx
FsRtlRegisterUncProviderEx2