#ifndef _NTRTL_H
// typedef struct _RTL_CRITICAL_SECTION_DEBUG
// {
// USHORT Type;
// USHORT CreatorBackTraceIndex;
// struct _RTL_CRITICAL_SECTION *CriticalSection;
// LIST_ENTRY ProcessLocksList;
// ULONG EntryCount;
// ULONG ContentionCount;
// ULONG Flags;
// USHORT CreatorBackTraceIndexHigh;
// USHORT Identifier;
// } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
//
// #pragma pack(push, 8)
// typedef struct _RTL_CRITICAL_SECTION
// {
// PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
// LONG LockCount;
// LONG RecursionCount;
// HANDLE OwningThread;
// HANDLE LockSemaphore;
// SIZE_T SpinCount;
// } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
// #pragma pack(pop)
/**
* The RtlInitializeCriticalSection routine initializes a critical section object.
*
* \param CriticalSection A pointer to the critical section object.
* \sa https://learn.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-initializecriticalsection
*/
NTSYSAPI
NTSTATUS
NTAPI
RtlInitializeCriticalSection(
_Out_ PRTL_CRITICAL_SECTION CriticalSection
);
View code on GitHubInitializes a critical section object.
InitializeCriticalSection maps directly to this function.