113{
115
116 if (IrpContext) {
117
118 if ( (IrpContext->Identifier.Type !=
EXT2ICX) ||
122 }
123
124 Status = IrpContext->ExceptionCode;
125
126 if (IrpContext->Irp) {
127
128
129
130
131
135
137 Vcb = (
PEXT2_VCB) IrpContext->DeviceObject->DeviceExtension;
138
146 } else {
148 }
149 } else {
150
151
152 if (IrpContext->IsTopLevel &&
156
158 }
159 }
160
162 goto errorout;
163 }
164
166
168
169
170
171
172
176
179 }
180
181
182
183
184
187
188 if (RealDevice ==
NULL) {
189
190
191
192
195
197 }
198
199 Status = IrpContext->ExceptionCode;
200
201 if (RealDevice !=
NULL) {
202
204
206
211 }
213
218 goto errorout;
219 }
220
222 (IrpContext->FileObject->RelatedFileObject ==
NULL) &&
224
226
230 }
231
233
238 }
239
241 }
242
243 goto errorout;
244
245 } else {
246
248
252 goto release_context;
253 }
254 }
255 }
256
258 }
259
260release_context:
261
263
264 } else {
265
267 }
268
269errorout:
270
272}
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
#define NT_SUCCESS(StatCode)
_In_ PIO_STACK_LOCATION IrpSp
#define PsGetCurrentThread()
#define KeGetCurrentIrql()
#define ExAcquireResourceSharedLite(res, wait)
NTSTATUS Ext2QueueRequest(IN PEXT2_IRP_CONTEXT IrpContext)
BOOLEAN Ext2CheckDismount(IN PEXT2_IRP_CONTEXT IrpContext, IN PEXT2_VCB Vcb, IN BOOLEAN bForce)
#define VCB_DISMOUNT_PENDING
#define Ext2NormalizeAndRaiseStatus(IRPCONTEXT, STATUS)
#define Ext2CompleteRequest(Irp, bPrint, PriorityBoost)
#define VCB_DEVICE_REMOVED
NTSTATUS Ext2CompleteIrpContext(IN PEXT2_IRP_CONTEXT IrpContext, IN NTSTATUS Status)
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
VOID NTAPI IoRaiseHardError(IN PIRP Irp, IN PVPB Vpb, IN PDEVICE_OBJECT RealDeviceObject)
VOID NTAPI IoSetDeviceToVerify(IN PETHREAD Thread, IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI IoSetHardErrorOrVerifyDevice(IN PIRP Irp, IN PDEVICE_OBJECT DeviceObject)
PDEVICE_OBJECT NTAPI IoGetDeviceToVerify(IN PETHREAD Thread)
NTSTATUS NTAPI IoVerifyVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount)
#define STATUS_VOLUME_DISMOUNTED
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_DEVICE
#define STATUS_UNSUCCESSFUL
#define STATUS_WRONG_VOLUME
#define STATUS_VERIFY_REQUIRED
#define IoIsErrorUserInduced(Status)