80{
83
87
91
93
96
97
98
99
100
101
102 if (IrpContext->Vcb ==
NULL) {
103
106 }
107
108
109
110
111
113
118
119
120
121
122
124
126
128 }
129
130
131
132
133
135
136
137
138
139
140
141
143
144
145
146
147
149
151
153
154
155
156
157
158
159
160
162
164
165 CdCheckForDismount( IrpContext,
Vcb,
TRUE );
166
168
169
170
171
172
173
174
176
178
180 }
181 }
182
183
184
185
186
188
189
190
191
192
194
195
196
197
198
200
202
203
204
205
206
210
211 break;
212
214
215
216
217
218
219
220
223 IrpContext,
226
227
228
229
230
232
237 }
238
239
240
241
242
244
245
246
247
248
252
253 break;
254
256
257 break;
258
259 default :
260
261#ifdef _MSC_VER
262#pragma prefast( suppress:__WARNING_USE_OTHER_FUNCTION, "argument bogus" )
263#endif
265 }
266
267
268
269
270
271
273
274
275
276
277
279
280
281
282
283
284
286
287
288
289
290
291
293
295
297
300 Vcb->VolumeLockFileObject =
NULL;
301 SendUnlockNotification =
TRUE;
302
304 }
305
307
308
309
310
311
312
313
315
317
319
320 if (SendUnlockNotification) {
321
323 }
325
326
327
328
329
330
331
332 if (AttemptTeardown) {
333
334
335
336
337
338
339
341
343
346
347 CdPurgeVolume( IrpContext,
Vcb,
FALSE );
348
350
352
355 }
356
357
358
359
360
362
364}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
VOID CdCompleteRequest(_Inout_opt_ PIRP_CONTEXT IrpContext, _Inout_opt_ PIRP Irp, _In_ NTSTATUS Status)
#define ASSERT_IRP_CONTEXT(IC)
BOOLEAN CdMarkDevForVerifyIfVcbMounted(_Inout_ PVCB Vcb)
#define CdAcquireCdData(IC)
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN TypeOfOpen
NTSTATUS CdHijackIrpAndFlushDevice(_In_ PIRP_CONTEXT IrpContext, _Inout_ PIRP Irp, _In_ PDEVICE_OBJECT TargetDeviceObject)
#define CdReleaseFile(IC, F)
#define CdReleaseVcb(IC, V)
#define CdReleaseFcb(IC, F)
#define CdGetFcbOplock(F)
#define CdReleaseCdData(IC)
#define CdUnlockVcb(IC, V)
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
#define CdAcquireVcbExclusive(IC, V, I)
#define CdDecrementCleanupCounts(IC, F)
#define CdAcquireFileExclusive(IC, F)
#define CdAcquireFcbExclusive(IC, F, I)
enum _TYPE_OF_OPEN TYPE_OF_OPEN
#define CdIsFastIoPossible(F)
#define CdUnlockFcb(IC, F)
#define CCB_FLAG_DISMOUNT_ON_CLOSE
#define CdBugCheck(A, B, C)
#define ClearFlag(_F, _SF)
NTSTATUS NTAPI FsRtlFastUnlockAll(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN PVOID Context OPTIONAL)
BOOLEAN NTAPI CcUninitializeCacheMap(IN PFILE_OBJECT FileObject, IN OPTIONAL PLARGE_INTEGER TruncateSize, IN OPTIONAL PCACHE_UNINITIALIZE_EVENT UninitializeEvent)
#define FSRTL_VOLUME_UNLOCK
VOID NTAPI FsRtlNotifyCleanup(IN PNOTIFY_SYNC NotifySync, IN PLIST_ENTRY NotifyList, IN PVOID FsContext)
NTSTATUS NTAPI FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject, IN ULONG EventCode)
VOID NTAPI IoRemoveShareAccess(IN PFILE_OBJECT FileObject, IN PSHARE_ACCESS ShareAccess)
PEPROCESS NTAPI IoGetRequestorProcess(IN PIRP Irp)
VOID NTAPI IoReleaseVpbSpinLock(IN KIRQL Irql)
VOID NTAPI IoAcquireVpbSpinLock(OUT PKIRQL Irql)
NTSTATUS NTAPI FsRtlCheckOplock(IN POPLOCK Oplock, IN PIRP Irp, IN PVOID Context, IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
#define FO_CLEANUP_COMPLETE