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>
19 /* FUNCTIONS ***************************************************************/
22 Ext2ReadSectors(IN PDEVICE_OBJECT pDeviceObject
,
27 LARGE_INTEGER sectorNumber
;
29 IO_STATUS_BLOCK ioStatus
;
35 DPRINT("VFATReadSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n",
36 pDeviceObject
,DiskSector
,Buffer
);
38 sectorNumber
.u
.HighPart
= 0;
39 sectorNumber
.u
.LowPart
= DiskSector
* BLOCKSIZE
;
41 DPRINT("DiskSector:%ld BLKSZ:%ld sectorNumber:%ld:%ld\n",
42 (unsigned long) DiskSector
,
43 (unsigned long) BLOCKSIZE
,
44 (unsigned long) sectorNumber
.u
.HighPart
,
45 (unsigned long) sectorNumber
.u
.LowPart
);
47 KeInitializeEvent(&event
, NotificationEvent
, FALSE
);
49 sectorSize
= BLOCKSIZE
*SectorCount
;
52 DPRINT("Building synchronous FSD Request...\n");
53 irp
= IoBuildSynchronousFsdRequest(IRP_MJ_READ
,
63 DbgPrint("READ failed!!!\n");
67 DPRINT("Calling IO Driver...\n");
68 status
= IoCallDriver(pDeviceObject
, irp
);
70 DPRINT("Waiting for IO Operation...\n");
71 if (status
== STATUS_PENDING
)
73 KeWaitForSingleObject(&event
,
78 DPRINT("Getting IO Status...\n");
79 status
= ioStatus
.Status
;
82 if (!NT_SUCCESS(status
))
84 DbgPrint("IO failed!!! Error code: %d(%x)\n", status
, status
);
91 BOOLEAN
VFATWriteSectors(IN PDEVICE_OBJECT pDeviceObject
,
96 LARGE_INTEGER sectorNumber
;
98 IO_STATUS_BLOCK ioStatus
;
105 DPRINT("VFATWriteSector(pDeviceObject %x, DiskSector %d, Buffer %x)\n",
106 pDeviceObject
,DiskSector
,Buffer
);
108 sectorNumber
.u
.HighPart
= 0;
109 sectorNumber
.u
.LowPart
= DiskSector
* BLOCKSIZE
;
111 KeInitializeEvent(&event
, NotificationEvent
, FALSE
);
113 sectorSize
= BLOCKSIZE
*SectorCount
;
116 DPRINT("Building synchronous FSD Request...\n");
117 irp
= IoBuildSynchronousFsdRequest(IRP_MJ_WRITE
,
126 DbgPrint("WRITE failed!!!\n");
130 DPRINT("Calling IO Driver...\n");
131 status
= IoCallDriver(pDeviceObject
,
134 DPRINT("Waiting for IO Operation...\n");
135 if (status
== STATUS_PENDING
) {
136 KeWaitForSingleObject(&event
,
141 DPRINT("Getting IO Status...\n");
142 status
= ioStatus
.Status
;
145 if (!NT_SUCCESS(status
)) {
146 DbgPrint("IO failed!!! Error code: %d(%x)\n", status
, status
);
152 DPRINT("Block request succeeded\n");