Implement ExCompleteRundownProtection() and ExReInitializeRundownProtection() routines and add stub for ExWaitForRundownProtectionRelease()
Builds / ExectOS (amd64) (push) Successful in 31s Details
Builds / ExectOS (i686) (push) Successful in 30s Details

This commit is contained in:
Rafal Kupiec 2023-11-05 09:50:04 +01:00
parent d9918f0380
commit ba833422b0
Signed by: belliash
GPG Key ID: 4E829243E0CFE6B4
4 changed files with 75 additions and 1 deletions

View File

@ -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 */

View File

@ -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
{

View File

@ -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;
}

View File

@ -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