| 604 | } |
| 605 | |
| 606 | BOOLEAN |
| 607 | Ext2LoadInodeXattr(IN PEXT2_VCB Vcb, |
| 608 | IN struct inode *Inode, |
| 609 | IN PEXT2_INODE InodeXattr) |
| 610 | { |
| 611 | IO_STATUS_BLOCK IoStatus; |
| 612 | LONGLONG Offset; |
| 613 | |
| 614 | if (!Ext2GetInodeLba(Vcb, Inode->i_ino, &Offset)) { |
| 615 | DEBUG(DL_ERR, ("Ext2LoadRawInode: error get inode(%xh)'s addr.\n", Inode->i_ino)); |
| 616 | return FALSE; |
| 617 | } |
| 618 | |
| 619 | if (!CcCopyRead( |
| 620 | Vcb->Volume, |
| 621 | (PLARGE_INTEGER)&Offset, |
| 622 | Vcb->InodeSize, |
| 623 | PIN_WAIT, |
| 624 | (PVOID)InodeXattr, |
| 625 | &IoStatus)) { |
| 626 | return FALSE; |
| 627 | } |
| 628 | |
| 629 | if (!NT_SUCCESS(IoStatus.Status)) { |
| 630 | return FALSE; |
| 631 | } |
| 632 | |
| 633 | Ext2EncodeInode(InodeXattr, Inode); |
| 634 | return TRUE; |
| 635 | } |
| 636 | |
| 637 | BOOLEAN |
| 638 | Ext2SaveInodeXattr(IN PEXT2_IRP_CONTEXT IrpContext, |
no test coverage detected