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

Function Ext2InspectReparseData

Ext4Fsd/fsctl.c:1290–1341  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1288}
1289
1290NTSTATUS
1291Ext2InspectReparseData(
1292 IN PREPARSE_DATA_BUFFER RDB,
1293 IN ULONG InputBufferLength
1294)
1295{
1296 NTSTATUS Status = STATUS_SUCCESS;
1297
1298 if (!RDB) {
1299 Status = STATUS_INVALID_PARAMETER;
1300 goto out;
1301 }
1302
1303 if (InputBufferLength < sizeof(REPARSE_DATA_BUFFER)) {
1304 Status = STATUS_BUFFER_OVERFLOW;
1305 goto out;
1306 }
1307
1308 if (InputBufferLength < RDB->ReparseDataLength) {
1309 Status = STATUS_BUFFER_OVERFLOW;
1310 goto out;
1311 }
1312
1313 if (RDB->ReparseTag != IO_REPARSE_TAG_SYMLINK) {
1314 Status = STATUS_NOT_IMPLEMENTED;
1315 goto out;
1316 }
1317
1318 if ((PUCHAR)RDB->SymbolicLinkReparseBuffer.PathBuffer
1319 + RDB->SymbolicLinkReparseBuffer.SubstituteNameOffset
1320 + RDB->SymbolicLinkReparseBuffer.SubstituteNameLength
1321 > (PUCHAR)RDB + InputBufferLength ) {
1322 Status = STATUS_BUFFER_OVERFLOW;
1323 goto out;
1324 }
1325
1326 if ((PUCHAR)RDB->SymbolicLinkReparseBuffer.PathBuffer
1327 + RDB->SymbolicLinkReparseBuffer.PrintNameOffset
1328 + RDB->SymbolicLinkReparseBuffer.PrintNameLength
1329 > (PUCHAR)RDB + InputBufferLength) {
1330 Status = STATUS_BUFFER_OVERFLOW;
1331 goto out;
1332 }
1333
1334 if (RDB->SymbolicLinkReparseBuffer.Flags != SYMLINK_FLAG_RELATIVE) {
1335 Status = STATUS_NOT_IMPLEMENTED;
1336 goto out;
1337 }
1338
1339out:
1340 return Status;
1341}
1342
1343VOID
1344Ext2InitializeReparseData(IN PREPARSE_DATA_BUFFER RDB, USHORT PathBufferLength)

Callers 1

Ext2SetReparsePointFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected