Implement ExCompleteRundownProtection() and ExReInitializeRundownProtection() routines and add stub for ExWaitForRundownProtectionRelease()
This commit is contained in:
parent
d9918f0380
commit
ba833422b0
|
@ -18,12 +18,24 @@ XTFASTCALL
|
|||
BOOLEAN
|
||||
ExAcquireRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
|
||||
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExCompleteRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
|
||||
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExInitializeRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
|
||||
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExReInitializeRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
|
||||
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExReleaseRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
|
||||
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExWaitForRundownProtectionRelease(IN PEX_RUNDOWN_REFERENCE Descriptor);
|
||||
|
||||
#endif /* __XTDK_EXFUNCS_H */
|
||||
|
|
|
@ -14,6 +14,9 @@
|
|||
#include <ketypes.h>
|
||||
|
||||
|
||||
/* Rundown protection flags */
|
||||
#define EX_RUNDOWN_ACTIVE 0x1
|
||||
|
||||
/* Executive rundown protection structure definition */
|
||||
typedef struct _EX_RUNDOWN_REFERENCE
|
||||
{
|
||||
|
|
|
@ -57,6 +57,23 @@ ExAcquireRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Marks the rundown descriptor as completed.
|
||||
*
|
||||
* @param Descriptor
|
||||
* Supplies a pointer to the descriptor to be completed.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since NT 5.1
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExCompleteRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
|
||||
{
|
||||
RtlAtomicExchangePointer(&Descriptor->Ptr, (PVOID)EX_RUNDOWN_ACTIVE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the rundown protection descriptor.
|
||||
*
|
||||
|
@ -75,6 +92,23 @@ ExInitializeRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
|
|||
Descriptor->Count = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reinitializes the rundown protection structure after it has been completed.
|
||||
*
|
||||
* @param Descriptor
|
||||
* Supplies a pointer to the descriptor to be reinitialized.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since NT 5.1
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExReInitializeRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
|
||||
{
|
||||
RtlAtomicExchangePointer(&Descriptor->Ptr, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Releases the rundown protection for given descriptor.
|
||||
*
|
||||
|
@ -125,3 +159,20 @@ ExReleaseRundownProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Waits until rundown protection calls are completed.
|
||||
*
|
||||
* @param Descriptor
|
||||
* Supplies a pointer to the rundown block descriptor.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since NT 5.1
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
ExWaitForRundownProtectionRelease(IN PEX_RUNDOWN_REFERENCE Descriptor)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
# XTOS exports
|
||||
@ fastcall ExAcquireRundownProtection(ptr)
|
||||
@ fastcall ExCompleteRundownProtection(ptr)
|
||||
@ fastcall ExInitializeRundownProtection(ptr)
|
||||
@ fastcall ExReInitializeRundownProtection(ptr)
|
||||
@ fastcall ExReleaseRundownProtection(ptr)
|
||||
@ fastcall ExWaitForRundownProtectionRelease(ptr)
|
||||
@ cdecl HlIoPortInByte(ptr)
|
||||
@ cdecl HlIoPortInLong(ptr)
|
||||
@ cdecl HlIoPortInShort(ptr)
|
||||
|
@ -29,4 +33,8 @@
|
|||
@ cdecl RtlWideStringConcatenate(wstr wstr long)
|
||||
@ cdecl RtlWideStringLength(wstr long)
|
||||
@ cdecl RtlWideStringTokenize(wstr wstr wstr)
|
||||
@ stdcall RtlZeroMemory(ptr long)
|
||||
@ stdcall RtlZeroMemory(ptr long)
|
||||
|
||||
|
||||
# NT compatibilty layer exports
|
||||
@ fastcall ExRundownCompleted(ptr) ExCompleteRundownProtection
|
||||
|
|
Loading…
Reference in New Issue