2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: services/fs/ext2/blockdev.c
5 * PURPOSE: Temporary sector reading support
6 * PROGRAMMER: David Welch (welch@cwcom.net)
10 /* INCLUDES *****************************************************************/
12 #include <ddk/ntddk.h>
14 #include <internal/string.h>
17 #include <internal/debug.h>
21 /* FUNCTIONS ***************************************************************/
23 BOOLEAN
Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject
,
28 LARGE_INTEGER sectorNumber
;
30 IO_STATUS_BLOCK ioStatus
;
36 DPRINT("VFATReadSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n",
37 pDeviceObject
,DiskSector
,Buffer
);
39 sectorNumber
.u
.HighPart
= 0;
40 sectorNumber
.u
.LowPart
= DiskSector
* BLOCKSIZE
;
42 DPRINT("DiskSector:%ld BLKSZ:%ld sectorNumber:%ld:%ld\n",
43 (unsigned long) DiskSector
,
44 (unsigned long) BLOCKSIZE
,
45 (unsigned long) sectorNumber
.u
.HighPart
,
46 (unsigned long) sectorNumber
.u
.LowPart
);
48 KeInitializeEvent(&event
, NotificationEvent
, FALSE
);
50 sectorSize
= BLOCKSIZE
*SectorCount
;
53 DPRINT("Building synchronous FSD Request...\n");
54 irp
= IoBuildSynchronousFsdRequest(IRP_MJ_READ
,
64 DbgPrint("READ failed!!!\n");
68 DPRINT("Calling IO Driver...\n");
69 status
= IoCallDriver(pDeviceObject
, irp
);
71 DPRINT("Waiting for IO Operation...\n");
72 if (status
== STATUS_PENDING
)
74 KeWaitForSingleObject(&event
,
79 DPRINT("Getting IO Status...\n");
80 status
= ioStatus
.Status
;
83 if (!NT_SUCCESS(status
))
85 DbgPrint("IO failed!!! Error code: %d(%x)\n", status
, status
);
92 BOOLEAN
VFATWriteSectors(IN PDEVICE_OBJECT pDeviceObject
,
97 LARGE_INTEGER sectorNumber
;
99 IO_STATUS_BLOCK ioStatus
;
106 DPRINT("VFATWriteSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n",
107 pDeviceObject
,DiskSector
,Buffer
);
109 sectorNumber
.u
.HighPart
= 0;
110 sectorNumber
.u
.LowPart
= DiskSector
* BLOCKSIZE
;
112 KeInitializeEvent(&event
, NotificationEvent
, FALSE
);
114 sectorSize
= BLOCKSIZE
*SectorCount
;
117 DPRINT("Building synchronous FSD Request...\n");
118 irp
= IoBuildSynchronousFsdRequest(IRP_MJ_WRITE
,
127 DbgPrint("WRITE failed!!!\n");
131 DPRINT("Calling IO Driver...\n");
132 status
= IoCallDriver(pDeviceObject
,
135 DPRINT("Waiting for IO Operation...\n");
136 if (status
== STATUS_PENDING
) {
137 KeWaitForSingleObject(&event
,
142 DPRINT("Getting IO Status...\n");
143 status
= ioStatus
.Status
;
146 if (!NT_SUCCESS(status
)) {
147 DbgPrint("IO failed!!! Error code: %d(%x)\n", status
, status
);
153 DPRINT("Block request succeeded\n");