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

Function Ext2NotifyChangeDirectory

Ext4Fsd/dirctl.c:1026–1166  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1024}
1025
1026NTSTATUS
1027Ext2NotifyChangeDirectory (
1028 IN PEXT2_IRP_CONTEXT IrpContext
1029)
1030{
1031 PDEVICE_OBJECT DeviceObject;
1032 BOOLEAN CompleteRequest = TRUE;
1033 NTSTATUS Status = STATUS_UNSUCCESSFUL;
1034 PEXT2_VCB Vcb = NULL;
1035 PEXT2_FCB Fcb = NULL;
1036 PEXT2_CCB Ccb = NULL;
1037 PIRP Irp = NULL;
1038 PIO_STACK_LOCATION IrpSp;
1039 PFILE_OBJECT FileObject;
1040 ULONG CompletionFilter;
1041 BOOLEAN WatchTree;
1042
1043 BOOLEAN bFcbAcquired = FALSE;
1044
1045 __try {
1046
1047 ASSERT(IrpContext);
1048 ASSERT((IrpContext->Identifier.Type == EXT2ICX) &&
1049 (IrpContext->Identifier.Size == sizeof(EXT2_IRP_CONTEXT)));
1050
1051 //
1052 // Always set the wait flag in the Irp context for the original request.
1053 //
1054
1055 SetFlag( IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT );
1056
1057 DeviceObject = IrpContext->DeviceObject;
1058
1059 if (IsExt2FsDevice(DeviceObject)) {
1060 Status = STATUS_INVALID_DEVICE_REQUEST;
1061 __leave;
1062 }
1063
1064 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
1065
1066 ASSERT(Vcb != NULL);
1067 ASSERT((Vcb->Identifier.Type == EXT2VCB) &&
1068 (Vcb->Identifier.Size == sizeof(EXT2_VCB)));
1069
1070 FileObject = IrpContext->FileObject;
1071 Fcb = (PEXT2_FCB) FileObject->FsContext;
1072 ASSERT(Fcb);
1073 if (Fcb->Identifier.Type == EXT2VCB) {
1074 DbgBreak();
1075 Status = STATUS_INVALID_PARAMETER;
1076 __leave;
1077 }
1078 ASSERT((Fcb->Identifier.Type == EXT2FCB) &&
1079 (Fcb->Identifier.Size == sizeof(EXT2_FCB)));
1080
1081 Ccb = (PEXT2_CCB) FileObject->FsContext2;
1082 ASSERT(Ccb);
1083 ASSERT((Ccb->Identifier.Type == EXT2CCB) &&

Callers 1

Ext2DirectoryControlFunction · 0.85

Calls 2

Ext2QueueRequestFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected