NtAlpcDeleteResourceReserve
NTSTATUS __stdcall NtAlpcDeleteResourceReserve(VOID *PortHandle, UINT64 Flags, UINT64 ResourceId){
_ETHREAD *CurrentThread;
unsigned int v4;
int v5;
_BLOB_TYPE *v6;
_ADAPTER_OBJECT *v7;
unsigned __int64 v8;
VOID *v9;
VOID *v10;
PADAPTER_OBJECT DmaAdapter;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = ResourceId;
--CurrentThread->Tcb.KernelApcDisable;
if( (_DWORD)Flags || (ResourceId & 0x80000000) == 0i64 )
{
v5 = -1073741811;
}
else
{
DmaAdapter = 0i64;
v5 = ObReferenceObjectByHandle(
PortHandle,
1ui64,
AlpcPortObjectType,
KeGetCurrentThread()->PreviousMode,
(VOID **)&DmaAdapter,
0i64);
if( v5 >= 0 )
{
v7 = DmaAdapter;
v8 = v4;
LODWORD(v8) = v4 & 0x7FFFFFFF;
v9 = AlpcReferenceBlobByHandle(
(_ALPC_HANDLE_TABLE *)&DmaAdapter->AdapterObject.ContiguousMapRegisters[2].Buffer,
(VOID *)v8,
(_BLOB_TYPE *)&AlpcReserveType,
v6);
v10 = v9;
if( v9 )
{
if( AlpcpDeleteBlob(v9) )
AlpcpDereferenceBlobEx(v10, 1i64);
else
v5 = -1073741738;
AlpcpDereferenceBlobEx(v10, 1i64);
}
else
{
v5 = -1073741816;
}
HalPutDmaAdapter(v7);
}
}
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v5;
}Referenced by:
No references.