MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / Ext2Pnp

Function Ext2Pnp

Ext4Fsd/pnp.c:59–146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

57
58
59NTSTATUS
60Ext2Pnp (IN PEXT2_IRP_CONTEXT IrpContext)
61{
62 NTSTATUS Status = STATUS_INVALID_PARAMETER;
63
64 PIRP Irp;
65 PIO_STACK_LOCATION IrpSp;
66 PEXT2_VCB Vcb = NULL;
67 PDEVICE_OBJECT DeviceObject;
68
69 __try {
70
71 ASSERT(IrpContext);
72
73 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
74 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
75
76 DeviceObject = IrpContext->DeviceObject;
77
78 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
79
80 ASSERT(Vcb != NULL);
81
82 if ( !((Vcb->Identifier.Type == EXT2VCB) &&
83 (Vcb->Identifier.Size == sizeof(EXT2_VCB)))) {
84 __leave; // Status = STATUS_INVALID_PARAMETER
85 }
86
87 Irp = IrpContext->Irp;
88 IrpSp = IoGetCurrentIrpStackLocation(Irp);
89
90 SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT);
91
92 switch ( IrpSp->MinorFunction ) {
93
94 case IRP_MN_QUERY_REMOVE_DEVICE:
95
96 DEBUG(DL_PNP, ("Ext2Pnp: Ext2PnpQueryRemove...\n"));
97 Status = Ext2PnpQueryRemove(IrpContext, Vcb);
98
99 break;
100
101 case IRP_MN_REMOVE_DEVICE:
102
103 DEBUG(DL_PNP, ("Ext2Pnp: Ext2PnpRemove...\n"));
104 Status = Ext2PnpRemove(IrpContext, Vcb);
105 break;
106
107 case IRP_MN_CANCEL_REMOVE_DEVICE:
108
109 DEBUG(DL_PNP, ("Ext2Pnp: Ext2PnpCancelRemove...\n"));
110 Status = Ext2PnpCancelRemove(IrpContext, Vcb);
111 break;
112
113 case IRP_MN_SURPRISE_REMOVAL:
114
115 DEBUG(DL_PNP, ("Ext2Pnp: Ext2PnpSupriseRemove...\n"));
116 Status = Ext2PnpSurpriseRemove(IrpContext, Vcb);

Callers 1

Ext2DispatchRequestFunction · 0.85

Calls 5

Ext2PnpQueryRemoveFunction · 0.85
Ext2PnpRemoveFunction · 0.85
Ext2PnpCancelRemoveFunction · 0.85
Ext2PnpSurpriseRemoveFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected