ReactOS 0.4.15-dev-7098-ge0c17c3
poshtdwn.c File Reference
#include <ntoskrnl.h>
#include <debug.h>
#include "inbv/logo.h"
Include dependency graph for poshtdwn.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

VOID NTAPI PopInitShutdownList (VOID)
 
NTSTATUS NTAPI PoRequestShutdownWait (_In_ PETHREAD Thread)
 
VOID NTAPI PopProcessShutDownLists (VOID)
 
VOID NTAPI PopShutdownHandler (VOID)
 
VOID NTAPI PopShutdownSystem (IN POWER_ACTION SystemAction)
 
VOID NTAPI PopGracefulShutdown (IN PVOID Context)
 
VOID NTAPI PopReadShutdownPolicy (VOID)
 
NTSTATUS NTAPI PoQueueShutdownWorkItem (_In_ PWORK_QUEUE_ITEM WorkItem)
 
NTSTATUS NTAPI PoRequestShutdownEvent (OUT PVOID *Event)
 

Variables

ULONG PopShutdownPowerOffPolicy
 
KEVENT PopShutdownEvent
 
PPOP_SHUTDOWN_WAIT_ENTRY PopShutdownThreadList
 
LIST_ENTRY PopShutdownQueue
 
KGUARDED_MUTEX PopShutdownListMutex
 
BOOLEAN PopShutdownListAvailable
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 16 of file poshtdwn.c.

Function Documentation

◆ PopGracefulShutdown()

VOID NTAPI PopGracefulShutdown ( IN PVOID  Context)

Definition at line 247 of file poshtdwn.c.

248{
250
251 /* Process the registered waits and work items */
253
254 /* Loop every process */
256 while (Process)
257 {
258 /* Make sure this isn't the idle or initial process */
260 {
261 /* Print it */
262 DPRINT1("%15s is still RUNNING (%p)\n", Process->ImageFileName, Process->UniqueProcessId);
263 }
264
265 /* Get the next process */
267 }
268
269 /* First, the HAL handles any "end of boot" special functionality */
270 DPRINT("HAL shutting down\n");
271 HalEndOfBoot();
272
273 /* Shut down the Shim cache if enabled */
275
276 /* In this step, the I/O manager does first-chance shutdown notification */
277 DPRINT("I/O manager shutting down in phase 0\n");
279
280 /* In this step, all workers are killed and hives are flushed */
281 DPRINT("Configuration Manager shutting down\n");
283
284 /* Shut down the Executive */
285 DPRINT("Executive shutting down\n");
287
288 /* Note that modified pages should be written here (MiShutdownSystem) */
290
291 /* Flush all user files before we start shutting down IO */
292 /* This is where modified pages are written back by the IO manager */
294
295 /* In this step, the I/O manager does last-chance shutdown notification */
296 DPRINT("I/O manager shutting down in phase 1\n");
299
300 /* FIXME: Calling Mm shutdown phase 1 here to get page file dereference
301 * but it shouldn't be called here. Only phase 2 should be called.
302 */
304
305 /* Note that here, we should broadcast the power IRP to devices */
306
307 /* In this step, the HAL disables any wake timers */
308 DPRINT("Disabling wake timers\n");
310
311 /* And finally the power request is sent */
312 DPRINT("Taking the system down\n");
314}
#define DPRINT1
Definition: precomp.h:8
VOID NTAPI CcShutdownSystem(VOID)
Definition: cachesub.c:299
VOID NTAPI CmShutdownSystem(VOID)
Definition: cmsysini.c:2140
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:223
NTSTATUS NTAPI CcWaitForCurrentLazyWriterActivity(VOID)
Definition: lazyrite.c:30
#define HalSetWakeEnable
Definition: halfuncs.h:39
VOID NTAPI ExShutdownSystem(VOID)
Definition: shutdown.c:21
VOID NTAPI IoShutdownSystem(IN ULONG Phase)
Definition: device.c:133
VOID MmShutdownSystem(IN ULONG Phase)
Definition: shutdown.c:77
POP_POWER_ACTION PopAction
Definition: power.c:27
VOID NTAPI PopProcessShutDownLists(VOID)
Definition: poshtdwn.c:103
VOID NTAPI PopShutdownSystem(IN POWER_ACTION SystemAction)
Definition: poshtdwn.c:192
VOID NTAPI ApphelpCacheShutdown(VOID)
Definition: apphelp.c:465
PEPROCESS NTAPI PsGetNextProcess(IN PEPROCESS OldProcess OPTIONAL)
Definition: process.c:128
PEPROCESS PsIdleProcess
Definition: psmgr.c:51
PEPROCESS PsInitialSystemProcess
Definition: psmgr.c:50
#define DPRINT
Definition: sndvol32.h:71
POWER_ACTION Action
Definition: po.h:216
#define HalEndOfBoot
Definition: haltypes.h:307

Referenced by NtSetSystemPowerState().

◆ PopInitShutdownList()

VOID NTAPI PopInitShutdownList ( VOID  )

Definition at line 35 of file poshtdwn.c.

36{
37 PAGED_CODE();
38
39 /* Initialize the global shutdown event */
41
42 /* Initialize the shutdown lists */
45
46 /* Initialize the shutdown list lock */
48
49 /* The list is available now */
51}
#define PAGED_CODE()
#define TRUE
Definition: types.h:120
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:31
@ NotificationEvent
KEVENT PopShutdownEvent
Definition: poshtdwn.c:24
KGUARDED_MUTEX PopShutdownListMutex
Definition: poshtdwn.c:27
BOOLEAN PopShutdownListAvailable
Definition: poshtdwn.c:28
LIST_ENTRY PopShutdownQueue
Definition: poshtdwn.c:26
PPOP_SHUTDOWN_WAIT_ENTRY PopShutdownThreadList
Definition: poshtdwn.c:25

Referenced by PoInitSystem().

◆ PopProcessShutDownLists()

VOID NTAPI PopProcessShutDownLists ( VOID  )

Definition at line 103 of file poshtdwn.c.

104{
105 PPOP_SHUTDOWN_WAIT_ENTRY ShutDownWaitEntry;
107 PLIST_ENTRY ListEntry;
108
109 /* First signal the shutdown event */
111
112 /* Acquire the shutdown list lock */
114
115 /* Block any further attempts to register a shutdown event */
117
118 /* Release the list lock, since we are exclusively using the lists now */
120
121 /* Process the shutdown queue */
123 {
124 /* Get the head entry */
125 ListEntry = RemoveHeadList(&PopShutdownQueue);
127
128 /* Call the shutdown worker routine */
129 WorkItem->WorkerRoutine(WorkItem->Parameter);
130 }
131
132 /* Now process the shutdown thread list */
133 while (PopShutdownThreadList != NULL)
134 {
135 /* Get the top entry and remove it from the list */
136 ShutDownWaitEntry = PopShutdownThreadList;
138
139 /* Wait for the thread to finish and dereference it */
140 KeWaitForSingleObject(ShutDownWaitEntry->Thread, 0, 0, 0, 0);
141 ObDereferenceObject(ShutDownWaitEntry->Thread);
142
143 /* Finally free the entry */
144 ExFreePoolWithTag(ShutDownWaitEntry, 'LSoP');
145 }
146}
#define IsListEmpty(ListHead)
Definition: env_spec_w32.h:954
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
Definition: env_spec_w32.h:478
#define KeSetEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:476
#define RemoveHeadList(ListHead)
Definition: env_spec_w32.h:964
VOID FASTCALL KeReleaseGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:53
VOID FASTCALL KeAcquireGuardedMutex(IN PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:42
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
Definition: typedefs.h:120
Definition: po.h:259
struct _POP_SHUTDOWN_WAIT_ENTRY * NextEntry
Definition: po.h:260
PETHREAD Thread
Definition: po.h:261
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
_Must_inspect_result_ _In_ PWDF_WORKITEM_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFWORKITEM * WorkItem
Definition: wdfworkitem.h:115
#define IO_NO_INCREMENT
Definition: iotypes.h:598
#define ObDereferenceObject
Definition: obfuncs.h:203

Referenced by PopGracefulShutdown().

◆ PopReadShutdownPolicy()

VOID NTAPI PopReadShutdownPolicy ( VOID  )

Definition at line 318 of file poshtdwn.c.

319{
320 UNICODE_STRING KeyString;
327
328 /* Setup object attributes */
329 RtlInitUnicodeString(&KeyString,
330 L"\\Registry\\Machine\\Software\\Policies\\Microsoft\\Windows NT");
332 &KeyString,
334 NULL,
335 NULL);
336
337 /* Open the key */
338 Status = ZwOpenKey(&KeyHandle, KEY_READ, &ObjectAttributes);
339 if (NT_SUCCESS(Status))
340 {
341 /* Open the policy value and query it */
342 RtlInitUnicodeString(&KeyString, L"DontPowerOffAfterShutdown");
343 Status = ZwQueryValueKey(KeyHandle,
344 &KeyString,
346 &Info,
347 sizeof(Info),
348 &Length);
349 if ((NT_SUCCESS(Status)) && (Info->Type == REG_DWORD))
350 {
351 /* Read the policy */
352 PopShutdownPowerOffPolicy = *Info->Data == 1;
353 }
354
355 /* Close the key */
357 }
358}
LONG NTSTATUS
Definition: precomp.h:26
Definition: bufpool.h:45
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:25
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4715
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
@ KeyValuePartialInformation
Definition: nt_native.h:1182
#define KEY_READ
Definition: nt_native.h:1023
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
struct _KEY_VALUE_PARTIAL_INFORMATION KEY_VALUE_PARTIAL_INFORMATION
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
#define L(x)
Definition: ntvdm.h:50
ULONG PopShutdownPowerOffPolicy
Definition: poshtdwn.c:23
#define REG_DWORD
Definition: sdbapi.c:596
void * PVOID
Definition: typedefs.h:50
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by NtSetSystemPowerState().

◆ PopShutdownHandler()

VOID NTAPI PopShutdownHandler ( VOID  )

Definition at line 150 of file poshtdwn.c.

151{
152 PUCHAR Logo1, Logo2;
153 ULONG i;
154
155 /* Stop all interrupts */
157 _disable();
158
159 /* Do we have boot video */
161 {
162 /* Yes we do, cleanup for shutdown screen */
168
169 /* Display shutdown logo and message */
172 if ((Logo1) && (Logo2))
173 {
176 }
177 }
178 else
179 {
180 /* Do it in text-mode */
181 for (i = 0; i < 25; i++) InbvDisplayString("\r\n");
183 InbvDisplayString("The system may be powered off now.\r\n");
184 }
185
186 /* Hang the system */
187 for (;;) HalHaltSystem();
188}
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment KeRaiseIrqlToDpcLevel
Definition: CrNtStubs.h:68
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID NTAPI InbvAcquireDisplayOwnership(VOID)
Definition: inbv.c:289
PUCHAR NTAPI InbvGetResourceAddress(_In_ ULONG ResourceNumber)
Definition: inbv.c:162
BOOLEAN NTAPI InbvCheckDisplayOwnership(VOID)
Definition: inbv.c:315
BOOLEAN NTAPI InbvEnableDisplayString(_In_ BOOLEAN Enable)
Definition: inbv.c:369
BOOLEAN NTAPI InbvDisplayString(_In_ PCHAR String)
Definition: inbv.c:331
VOID NTAPI InbvBitBlt(_In_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y)
Definition: inbv.c:530
BOOLEAN NTAPI InbvResetDisplay(VOID)
Definition: inbv.c:430
VOID NTAPI InbvSetScrollRegion(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom)
Definition: inbv.c:447
VOID NTAPI InbvSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ ULONG Color)
Definition: inbv.c:484
BOOLEAN NTAPI InbvIsBootDriverInstalled(VOID)
Definition: inbv.c:395
void __cdecl _disable(void)
Definition: intrin_arm.h:365
#define VID_SHUTDOWN_MSG_TOP
Definition: logo.h:28
#define VID_SHUTDOWN_LOGO_TOP
Definition: logo.h:26
#define VID_SHUTDOWN_LOGO_LEFT
Definition: logo.h:25
#define VID_SHUTDOWN_MSG_LEFT
Definition: logo.h:27
#define HalHaltSystem
Definition: halfuncs.h:43
#define IDB_SHUTDOWN_MSG
Definition: resource.h:13
#define IDB_LOGO_DEFAULT
Definition: resource.h:15
#define SCREEN_WIDTH
Definition: pc98video.c:27
#define SCREEN_HEIGHT
Definition: pc98video.c:28
#define BV_COLOR_BLACK
Definition: display.h:15
unsigned char * PUCHAR
Definition: typedefs.h:53

Referenced by PopShutdownSystem().

◆ PopShutdownSystem()

VOID NTAPI PopShutdownSystem ( IN POWER_ACTION  SystemAction)

Definition at line 192 of file poshtdwn.c.

193{
194 /* Note should notify caller of NtPowerInformation(PowerShutdownNotification) */
195
196 /* Unload symbols */
197 DPRINT("It's the final countdown...%lx\n", SystemAction);
199
200 /* Run the thread on the boot processor */
202
203 /* Now check what the caller wants */
204 switch (SystemAction)
205 {
206 /* Reset */
208
209 /* Try platform driver first, then legacy */
210 //PopInvokeSystemStateHandler(PowerStateShutdownReset, NULL);
213 break;
214
216
217 /* Check for group policy that says to use "it is now safe" screen */
219 {
220 /* FIXFIX: Switch to legacy shutdown handler */
221 //PopPowerStateHandlers[PowerStateShutdownOff].Handler = PopShutdownHandler;
222 }
223
225
226 /* Call shutdown handler */
227 //PopInvokeSystemStateHandler(PowerStateShutdownOff, NULL);
228
229 /* ReactOS Hack */
232
233 /* If that didn't work, call the HAL */
235 break;
236
237 default:
238 break;
239 }
240
241 /* Anything else should not happen */
242 KeBugCheckEx(INTERNAL_POWER_ERROR, 5, 0, 0, 0);
243}
VOID NTAPI HalReturnToFirmware(_In_ FIRMWARE_REENTRY Action)
Definition: reboot.c:21
@ HalPowerDownRoutine
Definition: haltypes.h:35
@ HalRebootRoutine
Definition: haltypes.h:37
VOID NTAPI DbgUnLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
@ PowerSystemShutdown
Definition: ntpoapi.h:41
@ PowerActionShutdownOff
Definition: ntpoapi.h:129
@ PowerActionShutdown
Definition: ntpoapi.h:127
@ PowerActionShutdownReset
Definition: ntpoapi.h:128
NTSTATUS NTAPI PopSetSystemPowerState(SYSTEM_POWER_STATE PowerState, POWER_ACTION PowerAction)
Definition: power.c:332
VOID NTAPI PopShutdownHandler(VOID)
Definition: poshtdwn.c:150
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
Definition: rtlcompat.c:108
VOID NTAPI KeSetSystemAffinityThread(IN KAFFINITY Affinity)
Definition: thrdobj.c:1106

Referenced by PopGracefulShutdown().

◆ PoQueueShutdownWorkItem()

NTSTATUS NTAPI PoQueueShutdownWorkItem ( _In_ PWORK_QUEUE_ITEM  WorkItem)

Definition at line 367 of file poshtdwn.c.

369{
371
372 /* Acquire the shutdown list lock */
374
375 /* Check if the list is (already/still) available */
377 {
378 /* Insert the item into the list */
381 }
382 else
383 {
384 /* We are already in shutdown */
386 }
387
388 /* Release the list lock */
390
391 return Status;
392}
#define InsertTailList(ListHead, Entry)
#define STATUS_SYSTEM_SHUTDOWN
Definition: ntstatus.h:855
#define STATUS_SUCCESS
Definition: shellext.h:65

◆ PoRequestShutdownEvent()

NTSTATUS NTAPI PoRequestShutdownEvent ( OUT PVOID Event)

Definition at line 399 of file poshtdwn.c.

400{
402 PAGED_CODE();
403
404 /* Initialize to NULL */
405 if (Event) *Event = NULL;
406
407 /* Request a shutdown wait */
409 if (!NT_SUCCESS(Status))
410 {
411 return Status;
412 }
413
414 /* Return the global shutdown event */
416 return STATUS_SUCCESS;
417}
#define PsGetCurrentThread()
Definition: env_spec_w32.h:81
NTSTATUS NTAPI PoRequestShutdownWait(_In_ PETHREAD Thread)
Definition: poshtdwn.c:55

Referenced by RawInputThreadMain().

◆ PoRequestShutdownWait()

NTSTATUS NTAPI PoRequestShutdownWait ( _In_ PETHREAD  Thread)

Definition at line 55 of file poshtdwn.c.

57{
58 PPOP_SHUTDOWN_WAIT_ENTRY ShutDownWaitEntry;
60 PAGED_CODE();
61
62 /* Allocate a new shutdown wait entry */
63 ShutDownWaitEntry = ExAllocatePoolWithTag(PagedPool, sizeof(*ShutDownWaitEntry), 'LSoP');
64 if (ShutDownWaitEntry == NULL)
65 {
66 return STATUS_NO_MEMORY;
67 }
68
69 /* Reference the thread and save it in the wait entry */
71 ShutDownWaitEntry->Thread = Thread;
72
73 /* Acquire the shutdown list lock */
75
76 /* Check if the list is still available */
78 {
79 /* Insert the item in the list */
80 ShutDownWaitEntry->NextEntry = PopShutdownThreadList;
81 PopShutdownThreadList = ShutDownWaitEntry;
82
83 /* We are successful */
85 }
86 else
87 {
88 /* We cannot proceed, cleanup and return failure */
90 ExFreePoolWithTag(ShutDownWaitEntry, 'LSoP');
92 }
93
94 /* Release the list lock */
96
97 /* Return the status */
98 return Status;
99}
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define PagedPool
Definition: env_spec_w32.h:308
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
#define STATUS_NO_MEMORY
Definition: ntstatus.h:260
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define ObReferenceObject
Definition: obfuncs.h:204

Referenced by PoRequestShutdownEvent().

Variable Documentation

◆ PopShutdownEvent

KEVENT PopShutdownEvent

Definition at line 24 of file poshtdwn.c.

Referenced by PopInitShutdownList(), PopProcessShutDownLists(), and PoRequestShutdownEvent().

◆ PopShutdownListAvailable

BOOLEAN PopShutdownListAvailable

◆ PopShutdownListMutex

◆ PopShutdownPowerOffPolicy

ULONG PopShutdownPowerOffPolicy

Definition at line 23 of file poshtdwn.c.

Referenced by PopReadShutdownPolicy(), and PopShutdownSystem().

◆ PopShutdownQueue

LIST_ENTRY PopShutdownQueue

◆ PopShutdownThreadList

PPOP_SHUTDOWN_WAIT_ENTRY PopShutdownThreadList

Definition at line 25 of file poshtdwn.c.

Referenced by PopInitShutdownList(), PopProcessShutDownLists(), and PoRequestShutdownWait().