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

Function Ext2GetReparsePoint

Ext4Fsd/fsctl.c:1383–1513  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1381
1382
1383NTSTATUS
1384Ext2GetReparsePoint (IN PEXT2_IRP_CONTEXT IrpContext)
1385{
1386 PIRP Irp = NULL;
1387 PIO_STACK_LOCATION IrpSp;
1388 PEXTENDED_IO_STACK_LOCATION EIrpSp;
1389
1390 PDEVICE_OBJECT DeviceObject;
1391
1392 PEXT2_VCB Vcb = NULL;
1393 PEXT2_CCB Ccb = NULL;
1394 PEXT2_MCB Mcb = NULL;
1395
1396 NTSTATUS Status = STATUS_UNSUCCESSFUL;
1397 BOOLEAN MainResourceAcquired = FALSE;
1398
1399 PVOID OutputBuffer;
1400 ULONG OutputBufferLength;
1401 ULONG BytesRead = 0;
1402
1403 PREPARSE_DATA_BUFFER RDB;
1404
1405 UNICODE_STRING UniName;
1406 OEM_STRING OemName;
1407
1408 PCHAR OemNameBuffer = NULL;
1409 int OemNameLength = 0, i;
1410
1411 Ccb = IrpContext->Ccb;
1412 ASSERT(Ccb != NULL);
1413 ASSERT((Ccb->Identifier.Type == EXT2CCB) &&
1414 (Ccb->Identifier.Size == sizeof(EXT2_CCB)));
1415 DeviceObject = IrpContext->DeviceObject;
1416 Vcb = (PEXT2_VCB) DeviceObject->DeviceExtension;
1417 Mcb = IrpContext->Fcb->Mcb;
1418 Irp = IrpContext->Irp;
1419 IrpSp = IoGetCurrentIrpStackLocation(Irp);
1420
1421 __try {
1422
1423 if (!Mcb || !IsInodeSymLink(&Mcb->Inode) ||
1424 !IsFlagOn(Ccb->Flags, CCB_OPEN_REPARSE_POINT)) {
1425 Status = STATUS_NOT_A_REPARSE_POINT;
1426 __leave;
1427 }
1428
1429 OutputBuffer = (PVOID)Irp->AssociatedIrp.SystemBuffer;
1430 OutputBufferLength = IrpSp->Parameters.FileSystemControl.OutputBufferLength;
1431
1432 RDB = (PREPARSE_DATA_BUFFER)OutputBuffer;
1433 if (!RDB) {
1434 Status = STATUS_INVALID_PARAMETER;
1435 __leave;
1436 }
1437 if (OutputBufferLength < sizeof(REPARSE_DATA_BUFFER)) {
1438 Status = STATUS_BUFFER_OVERFLOW;
1439 __leave;
1440 }

Callers 1

Ext2UserFsRequestFunction · 0.85

Calls 8

Ext2AllocatePoolFunction · 0.85
Ext2ReadSymlinkFunction · 0.85
Ext2OEMToUnicodeSizeFunction · 0.85
Ext2OEMToUnicodeFunction · 0.85
Ext2FreePoolFunction · 0.85
Ext2QueueRequestFunction · 0.85
Ext2CompleteIrpContextFunction · 0.85

Tested by

no test coverage detected