| 1288 | } |
| 1289 | |
| 1290 | NTSTATUS |
| 1291 | Ext2InspectReparseData( |
| 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 | |
| 1339 | out: |
| 1340 | return Status; |
| 1341 | } |
| 1342 | |
| 1343 | VOID |
| 1344 | Ext2InitializeReparseData(IN PREPARSE_DATA_BUFFER RDB, USHORT PathBufferLength) |
no outgoing calls
no test coverage detected