1 /*++
2 
3 Copyright (c) Microsoft Corporation
4 
5 Module Name:
6 
7     FxSystemThreadUm.cpp
8 
9 Abstract:
10 
11     This is the implementation of the FxSystemThread object.
12 
13 
14 Author:
15 
16 
17 
18 
19 
20 Environment:
21 
22     User mode only
23 
24 Revision History:
25 
26 
27 --*/
28 
29 #include <fxmin.hpp>
30 
31 #pragma warning(push)
32 #pragma warning(disable:4100) //unreferenced parameter
33 
34 FxSystemThread::FxSystemThread(
35     __in PFX_DRIVER_GLOBALS FxDriverGlobals
36     ) :
37     FxNonPagedObject(FX_TYPE_SYSTEMTHREAD, 0, FxDriverGlobals)
38 {
39     UfxVerifierTrapNotImpl();
40 }
41 
42 FxSystemThread::~FxSystemThread()
43 {
44     UfxVerifierTrapNotImpl();
45 }
46 
47 NTSTATUS
48 FxSystemThread::_CreateAndInit(
49     __out FxSystemThread** SystemThread,
50     __in PFX_DRIVER_GLOBALS FxDriverGlobals,
51     __in WDFDEVICE Device,
52     __in MdDeviceObject DeviceObject
53     )
54 {
55     UfxVerifierTrapNotImpl();
56 
57     return STATUS_NOT_IMPLEMENTED;
58 }
59 
60 //
61 // Create the system thread in order to be able to service work items
62 //
63 // It is recommended this is done from the system process context
64 // since the threads handle is available to the user mode process
65 // for a temporary window. XP and later supports OBJ_KERNELHANDLE, but
66 // DriverFrameworks must support W2K with the same binary.
67 //
68 // It is safe to call this at DriverEntry which is in the system process
69 // to create an initial driver thread, and this driver thread should be
70 // used for creating any child driver threads on demand.
71 //
72 BOOLEAN
73 FxSystemThread::Initialize()
74 {
75     UfxVerifierTrapNotImpl();
76     return FALSE;
77 }
78 
79 NTSTATUS
80 FxSystemThread::CreateThread(
81     VOID
82     )
83 {
84     UfxVerifierTrapNotImpl();
85     return STATUS_NOT_IMPLEMENTED;
86 }
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 //
100 // This is called to tell the thread to exit.
101 //
102 // It must be called from thread context such as
103 // the driver unload routine since it will wait for the
104 // thread to exit.
105 //
106 BOOLEAN
107 FxSystemThread::ExitThread()
108 {
109     UfxVerifierTrapNotImpl();
110     return FALSE;
111 }
112 
113 BOOLEAN
114 FxSystemThread::ExitThreadAsync(
115     __inout FxSystemThread* Reaper
116     )
117 {
118     UfxVerifierTrapNotImpl();
119     return FALSE;
120 }
121 
122 BOOLEAN
123 FxSystemThread::QueueWorkItem(
124     __inout PWORK_QUEUE_ITEM WorkItem
125     )
126 {
127     UfxVerifierTrapNotImpl();
128     return FALSE;
129 }
130 
131 //
132 // Attempt to cancel the work item.
133 //
134 // Returns TRUE if success.
135 //
136 // If returns FALSE, the work item
137 // routine either has been called, is running,
138 // or is about to be called.
139 //
140 BOOLEAN
141 FxSystemThread::CancelWorkItem(
142     __inout PWORK_QUEUE_ITEM WorkItem
143     )
144 {
145     UfxVerifierTrapNotImpl();
146     return FALSE;
147 }
148 
149 VOID
150 FxSystemThread::Thread()
151 {
152     UfxVerifierTrapNotImpl();
153 }
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 VOID
168 FxSystemThread::Reaper()
169 {
170     UfxVerifierTrapNotImpl();
171 }
172 
173 VOID
174 FxSystemThread::StaticThreadThunk(
175     __inout PVOID Context
176     )
177 {
178     UfxVerifierTrapNotImpl();
179 }
180 
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 VOID
192 FxSystemThread::StaticReaperThunk(
193     __inout PVOID Context
194     )
195 {
196     UfxVerifierTrapNotImpl();
197 }
198 
199 #pragma warning(pop)
200