|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Calling DeviceIoControl on Windows 95
A Win32-based application running on Windows 95 can use the DeviceIoControl function to send control codes directly to a virtual device driver (VxD). Any VxD can support any number of control codes, or none at all.
The system VxD, VWIN32.VXD, supports the input and output control (IOCTL) functions originally provided by MS-DOS Interrupt 21h. The following example shows how to call Get Media ID (Interrupt 21h Function 440Dh Minor Code 66h) from a Win32-based application:
"\\\\.\\VxDName" In Windows 95, #define VWIN32_DIOC_DOS_IOCTL 1 typedef struct _DEVIOCTL_REGISTERS { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; DWORD reg_EDI; DWORD reg_ESI; DWORD reg_Flags; } DEVIOCTL_REGISTERS, *PDEVIOCTL_REGISTERS; typedef struct _MID { WORD midInfoLevel; DWORD midSerialNum; BYTE midVolLabel[11]; BYTE midFileSysType[8]; } MID, *PMID; BOOL GetMediaID(PMID pmid, UINT nDrive)
{ DEVIOCTL_REGISTERS reg; reg.reg_EAX = 0x440D; /* IOCTL for block devices */ reg.reg_EBX = nDrive; /* zero-based drive ID */ reg.reg_ECX = 0x0866; /* Get Media ID command */ reg.reg_EDX = (DWORD) pmid; /* receives media ID info */ if (!DoIOCTL(®)) return FALSE; if (reg.reg_Flags & 0x8000) /* error if carry flag set */ return FALSE; return TRUE; } BOOL DoIOCTL(PDEVIOCTL_REGISTERS preg)
{ HANDLE hDevice; BOOL fResult; DWORD cb; preg->reg_Flags = 0x8000; /* assume error (carry flag set) */ hDevice = CreateFile("\\\\.\\vwin32", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES) NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); if (hDevice == (HANDLE) INVALID_HANDLE_VALUE) return FALSE; else { fResult = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_IOCTL,
preg, sizeof(*preg), preg, sizeof(*preg), &cb, 0); if (!fResult) return FALSE; } CloseHandle(hDevice); return TRUE; }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Вызов DeviceIoControl в Окне 95
Базирующееся приложение Win32, работающее на Окне 95 может использовать функцию DeviceIoControl, чтобы посылать управляющие коды непосредственно виртуальному водителю устройства (VxD). Любое VxD может поддержать любое число управляющее кодировать, или совсем ничего.
Система VxD, VWIN32.VXD, поддерживает входное и выходное управление (IOCTL), которое функции первоначально предусматривались Прерыванием МС-DOS 21h. следующий пример показывает как, чтобы вызов Получает Носителя ID (21h Функция Прерывания 440Dh Незначительный Код 66h) из базирующегося приложения Win32:
"\\\\.\\VxDName" В Окне 95, #define VWIN32_DIOC_DOS_IOCTL 1 typedef struct _DEVIOCTL_REGISTERS { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; DWORD reg_EDI; DWORD reg_ESI; DWORD reg_Flags; } DEVIOCTL_REGISTERS, *PDEVIOCTL_REGISTERS; typedef struct _MID { WORD midInfoLevel; DWORD midSerialNum; БАЙТ midVolLabel[11]; БАЙТ midFileSysType[8]; } СРЕДНИЙ, *PMID; BOOL GetMediaID(PMID pmid, UINT nDrive)
{ reg DEVIOCTL_REGISTERS; reg.reg_EAX = 0x440D; /* IOCTL ДЛЯ блочных устройств */ reg.reg_EBX = nDrive; /* базирующийся нулевой проезд ID */ reg.reg_ECX = 0x0866; /* Получите команду Носителя ID */ reg.reg_EDX = (DWORD) pmid; /* носитель приемников ID info */ если (!DoIOCTL(®)) ОБРАТНАЯ ЛОЖЬ; если (reg.reg_Flags & 0x8000) /* ошибка если флаг переноса был установлен */ обратная ЛОЖЬ; возвращайтесь ВЕРНО; } BOOL DoIOCTL(PDEVIOCTL_REGISTERS preg)
{ ПРООПЕРИРУЙТЕ hDevice; BOOL fResult; cb DWORD; preg->reg_Flags = 0x8000; /* примите ошибку (флаг переноса был установлен) */ hDevice = CreateFile("\\\\.\\vwin32", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES) НЕДЕЙСТВИТЕЛЬНЫЙ, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (РУЧКА) НЕДЕЙСТВИТЕЛЬНАЯ); если (hDevice == (РУЧКА) INVALID_HANDLE_VALUE) обратная ЛОЖЬ; еще { fResult = DeviceIoControl(hDevice, VWIN32_DIOC_DOS_IOCTL,
preg, sizeof(*preg), preg, sizeof(*preg), &cb, 0); если (!fResult) обратная ЛОЖЬ; } CloseHandle(hDevice); возвращайтесь ВЕРНО; }
|
|
|
|
| |