shahlynn
驱动牛犊
驱动牛犊
  • 注册日期2004-03-12
  • 最后登录2011-01-01
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望90点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:988回复:1

想要找到系统中安装的某一型号的光驱

楼主#
更多 发布于:2004-08-13 02:03
应该怎么做?应用程序和光驱的交互过程是怎样的?谢谢!
zhiyuan19840428
驱动小牛
驱动小牛
  • 注册日期2004-05-11
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-13 07:53
根据光驱的GUID用以下Setup API找到光驱设备对象的symbollink name然后用CreateFile,ReadFile, WriteFile,DeviceIoControl来操作光驱,
   HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if(info==INVALID_HANDLE_VALUE)
{
printf(cError, "No HDEVINFO available for this GUID , error code %u", GetLastError());
OutputDebugString(cError);
return NULL;
}

// Get interface data for the requested instance
SP_INTERFACE_DEVICE_DATA ifdata;
ifdata.cbSize = sizeof(ifdata);
if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata))
{
printf(cError, "No SP_INTERFACE_DEVICE_DATA available for this GUID instance , error code %u", GetLastError());
OutputDebugString(cError);
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get size of symbolic link name
DWORD ReqLen;
SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);
PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]);
if( ifDetail==NULL)
{
SetupDiDestroyDeviceInfoList(info);
return NULL;
}

// Get symbolic link name
ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);
if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))
{
SetupDiDestroyDeviceInfoList(info);
delete ifDetail;
return NULL;
}

// Open file
HANDLE rv = CreateFile( ifDetail->DevicePath,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( rv==INVALID_HANDLE_VALUE) rv = NULL;

delete ifDetail;
SetupDiDestroyDeviceInfoList(info);
不明白找我:MSN:xingxueping@hotmail.com
游客

返回顶部