| 2000 | } |
| 2001 | |
| 2002 | BOOLEAN |
| 2003 | Ext2IsMediaWriteProtected ( |
| 2004 | IN PEXT2_IRP_CONTEXT IrpContext, |
| 2005 | IN PDEVICE_OBJECT TargetDevice |
| 2006 | ) |
| 2007 | { |
| 2008 | PIRP Irp; |
| 2009 | KEVENT Event; |
| 2010 | NTSTATUS Status; |
| 2011 | IO_STATUS_BLOCK IoStatus; |
| 2012 | |
| 2013 | KeInitializeEvent(&Event, NotificationEvent, FALSE); |
| 2014 | |
| 2015 | Irp = IoBuildDeviceIoControlRequest( IOCTL_DISK_IS_WRITABLE, |
| 2016 | TargetDevice, |
| 2017 | NULL, |
| 2018 | 0, |
| 2019 | NULL, |
| 2020 | 0, |
| 2021 | FALSE, |
| 2022 | &Event, |
| 2023 | &IoStatus ); |
| 2024 | |
| 2025 | if (Irp == NULL) { |
| 2026 | return FALSE; |
| 2027 | } |
| 2028 | |
| 2029 | SetFlag(IoGetNextIrpStackLocation(Irp)->Flags, SL_OVERRIDE_VERIFY_VOLUME); |
| 2030 | |
| 2031 | Status = IoCallDriver(TargetDevice, Irp); |
| 2032 | |
| 2033 | if (Status == STATUS_PENDING) { |
| 2034 | |
| 2035 | (VOID) KeWaitForSingleObject( &Event, |
| 2036 | Executive, |
| 2037 | KernelMode, |
| 2038 | FALSE, |
| 2039 | (PLARGE_INTEGER)NULL ); |
| 2040 | |
| 2041 | Status = IoStatus.Status; |
| 2042 | } |
| 2043 | |
| 2044 | return (BOOLEAN)(Status == STATUS_MEDIA_WRITE_PROTECTED); |
| 2045 | } |
| 2046 | |
| 2047 | NTSTATUS |
| 2048 | Ext2MountVolume (IN PEXT2_IRP_CONTEXT IrpContext) |
no outgoing calls
no test coverage detected