APPLICATION STREAMING APIS
A stream’s IO is performed by a combination of functions, as shown in Table 32-5. You can use the API functions in an application performing IO on the stream. The calls require the stream’s handle, as returned from CreateFile, a data buffer pointer, and some indication of how much data is moved. The device manager takes those parameters and passes them to the corresponding driver function along with the open context for the stream pointed to by the handle. The driver functions are not what are called by the user application. The driver functions are an interface to the Driver Manager, not an application.
|API||Driver||Example API call|
HANDLE hStr = CreateFile(_T("MDY1:"), GENERIC_READ | GENERIC_WRITE,0, NULL,OPEN_EXISTING, NULL,0);
BOOL rs = ReadFile(hStr,bufferIn , 12, &dw, NULL);
BOOL rs = WriteFile(hStr, bufferOut , 12 &dw,NULL);
BOOL rs = DeviceIoControl(hStr,IOCTL_NO,NULL,0, NULL, 0,&dw,NULL);
BOOL res = CloseHandle(hStr);
In the preceding examples the buffers are pointers to storage in the application. The 12 parameter is the number of bytes to pass from or to the buffer. The actual number of bytes, especially for the read, may be different as indicated by the returned value of dw. With the DeviceIOControl call, IOCTL_NO is the number of the IOCTL to be actioned by the driver. All API functions ...