Так я открываю драйвер в VC++ 8:
Код
HDEVINFO hDevInfo;
// {A5DCBF10-6530-11D2-901F-00C04FB951ED}
GUID Nguid =
{ 0xA5DCBF10, 0x6530, 0x11d2, { 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed } };
GUID *guid = &Nguid;
hDevInfo = SetupDiGetClassDevs (guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); /*Мы попросили вернуть нам описатель для устройств, предоставляющих интерфейс с guid и присутствующих в данный момент в системе получаем краткую информацию для интерфейсов (в данном случае, для первого интерфейса в списке с подходящим guid)*/
PSP_DEVICE_INTERFACE_DATA devInfoData = (PSP_DEVICE_INTERFACE_DATA)malloc(sizeof(SP_DEVICE_INTERFACE_DATA));
devInfoData->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SetupDiEnumDeviceInterfaces(hDevInfo, NULL, guid, 0, devInfoData);
//Определим необходимую для хранения символического имени устройства длину буфера
unsigned long requiredlength;
SetupDiGetDeviceInterfaceDetail(hDevInfo, devInfoData, NULL, 0, &requiredlength, NULL);
//Узнаем символическое имя для устройства с заданным интерфейсом
PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredlength);
DevInfoDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SetupDiGetInterfaceDeviceDetail (hDevInfo, devInfoData, DevInfoDetail, requiredlength, &requiredlength, NULL);
//открытие порта
HANDLE port = CreateFile(DevInfoDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
//проверка результата открытия порта
if (port == INVALID_HANDLE_VALUE) {pDoc->StringData1 = "failed opening";}
else {pDoc->StringData1 = "cool opening";}
BOOLEAN Success;
unsigned char com_buf[28];//буфер ком. слов и слова режима
//заполнение буфера com_buf
com_buf[0]=0x30; //команда для командного процессора девайса: запрос подтверждения приема данных
com_buf[1]=mTMode[0];
com_buf[2]=mTMode[1];
for(int i=3;i<27;i++)
{
com_buf[i]=mCWord[i-3];
}
com_buf[27]=0x0;
//Запись в файл
ULONG nBytes=28;
Success = WriteFile(port, &com_buf, 28, &nBytes, NULL);//Запись слова режима, ком. слова
//ожидание окончания записи в файл
if(!Success ) //|| ( nBytes != sizeof(VENDORPACKET) ) )
{
pDoc->StringData1 += " failed to write";
} else
{
pDoc->StringData1 += " write successful";
}
// {A5DCBF10-6530-11D2-901F-00C04FB951ED}
GUID Nguid =
{ 0xA5DCBF10, 0x6530, 0x11d2, { 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed } };
GUID *guid = &Nguid;
hDevInfo = SetupDiGetClassDevs (guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); /*Мы попросили вернуть нам описатель для устройств, предоставляющих интерфейс с guid и присутствующих в данный момент в системе получаем краткую информацию для интерфейсов (в данном случае, для первого интерфейса в списке с подходящим guid)*/
PSP_DEVICE_INTERFACE_DATA devInfoData = (PSP_DEVICE_INTERFACE_DATA)malloc(sizeof(SP_DEVICE_INTERFACE_DATA));
devInfoData->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SetupDiEnumDeviceInterfaces(hDevInfo, NULL, guid, 0, devInfoData);
//Определим необходимую для хранения символического имени устройства длину буфера
unsigned long requiredlength;
SetupDiGetDeviceInterfaceDetail(hDevInfo, devInfoData, NULL, 0, &requiredlength, NULL);
//Узнаем символическое имя для устройства с заданным интерфейсом
PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredlength);
DevInfoDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
SetupDiGetInterfaceDeviceDetail (hDevInfo, devInfoData, DevInfoDetail, requiredlength, &requiredlength, NULL);
//открытие порта
HANDLE port = CreateFile(DevInfoDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
//проверка результата открытия порта
if (port == INVALID_HANDLE_VALUE) {pDoc->StringData1 = "failed opening";}
else {pDoc->StringData1 = "cool opening";}
BOOLEAN Success;
unsigned char com_buf[28];//буфер ком. слов и слова режима
//заполнение буфера com_buf
com_buf[0]=0x30; //команда для командного процессора девайса: запрос подтверждения приема данных
com_buf[1]=mTMode[0];
com_buf[2]=mTMode[1];
for(int i=3;i<27;i++)
{
com_buf[i]=mCWord[i-3];
}
com_buf[27]=0x0;
//Запись в файл
ULONG nBytes=28;
Success = WriteFile(port, &com_buf, 28, &nBytes, NULL);//Запись слова режима, ком. слова
//ожидание окончания записи в файл
if(!Success ) //|| ( nBytes != sizeof(VENDORPACKET) ) )
{
pDoc->StringData1 += " failed to write";
} else
{
pDoc->StringData1 += " write successful";
}
Код возвращат " failed to write".
Кто-нибудь сталкивался с такой проблемой?