FsRtlpRegisterProviderWithMUP
__int64 __fastcall FsRtlpRegisterProviderWithMUP(HANDLE Handle, const void **a2, __int64 a3, __int64 a4){
ULONG InputBufferLength;
UINT8 *PoolWithTag;
UINT8 *InputBuffer;
unsigned int Status;
struct _IO_STATUS_BLOCK IoStatusBlock;
InputBufferLength = *(unsigned __int16 *)a2 + 32;
IoStatusBlock = 0i64;
PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, InputBufferLength, 0x6E755346ui64);
InputBuffer = PoolWithTag;
if( !PoolWithTag )
return 3221225626i64;
*((_QWORD *)PoolWithTag + 1) = PoolWithTag + 32;
*(_WORD *)PoolWithTag = *(_WORD *)a2;
*((_WORD *)PoolWithTag + 1) = *(_WORD *)a2;
*((_QWORD *)PoolWithTag + 2) = a3;
*((_QWORD *)PoolWithTag + 3) = a4;
memmove(PoolWithTag + 32, (UINT8 *)a2[1], *(unsigned __int16 *)a2);
Status = ZwFsControlFile(Handle, 0i64, 0i64, 0i64, &IoStatusBlock, 0x100004u, InputBuffer, InputBufferLength, 0i64, 0);
if( Status == 259 )
{
ZwWaitForSingleObject(Handle, 0, 0i64);
Status = IoStatusBlock.Status;
}
ExFreePoolWithTag(InputBuffer, 0);
return Status;
}Referenced by:
FsRtlpRegisterUncProvider