VC6.0 获取设备友好名称 (Friendly Name)

问题描述

VC6.0 获取设备友好名称 (Friendly Name)

VC6.0编写的dll函数用来获取读卡器设备的友好名称,调试中发现当获取设备硬件ID SPDRP_HARDWAREID 时可以取到,但取设备友好名称SPDRP_FRIENDLYNAME时,却为空,代码如下:
int _stdcall GetReaderCardFriendlyName(char *ReaderID)

{
// BOOL iRet = TRUE;
// PDWORD dwBufSize;
DWORD actualSize = 0;
DWORD dwBufSize = 0;

TCHAR dataBuf[MAX_PATH + 1]; // 建立缓冲区以存储设备范例ID;
int len = 0;
int ReaderNum = 0;
GUID ReaderCardClassGuid = {0X50DD5230, 0XBA8A, 0X11D1, {0XBF, 0X5D, 0X00, 0X00, 0Xf8, 0X05, 0Xf5, 0X30}};

//得到一个Class下信息集句柄
m_NewDeviceInfoSet = SetupDiGetClassDevs(&ReaderCardClassGuid, NULL, NULL, DIGCF_PRESENT);   //DIGCF_PRESENT (只列出当前存在的设备信息)
if(m_NewDeviceInfoSet == INVALID_HANDLE_VALUE)
{
   // wprintf(_T("NewDeviceInfoSet == INVALID_HANDLE_VALUE"));
    //bRet = FALSE;
    return -1;
}  

//对得到的此class信息集进行枚举
for(int Device_Index=0; ; Device_Index++)
{
    memset((void*)&(m_ReaderCardDevInfoData), 0, sizeof(SP_DEVINFO_DATA));
    m_ReaderCardDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    BOOL  bResult  = SetupDiEnumDeviceInfo(m_NewDeviceInfoSet, Device_Index, &m_ReaderCardDevInfoData);
    if(bResult == 0)
    {
        if(GetLastError() == ERROR_NO_MORE_ITEMS)
        {
            break;
        }
    //  *pdwBufSize = Required_Size;
    }
    BYTE    *pbReuslt = MySetupDiGetDeviceRegistryProperty(
            SPDRP_FRIENDLYNAME ,   // SPDRP_FRIENDLYNAME SPDRP_HARDWAREID SPDRP_PHYSICAL_DEVICE_OBJECT_NAME
            NULL,&dwBufSize);
    if(pbReuslt)
    {
        TCHAR *tcName = (TCHAR*)pbReuslt;
        free(pbReuslt);
    }
}
//销毁一个Class的device information set
SetupDiDestroyDeviceInfoList(m_NewDeviceInfoSet);
return 0;

}

BYTE* MySetupDiGetDeviceRegistryProperty(
IN DWORD Property,

OUT PDWORD PropertyRegDataType ,

OUT PDWORD pdwBufSize)

{

DWORD Required_Size = 0;

 BOOL bResult = SetupDiGetDeviceRegistryProperty(
                m_NewDeviceInfoSet,
                &m_ReaderCardDevInfoData,
                Property ,
                PropertyRegDataType,
                NULL, 0,
                &Required_Size);
if(!bResult)
{
    if(ERROR_INSUFFICIENT_BUFFER == GetLastError())
    {
        *pdwBufSize = Required_Size;
        BYTE *PropertyBuffer = (BYTE*)malloc(Required_Size);  

        bResult = SetupDiGetDeviceRegistryProperty(
                m_NewDeviceInfoSet,
                &m_ReaderCardDevInfoData,
                Property ,
                PropertyRegDataType,
                PropertyBuffer,
                Required_Size, NULL);
        if(bResult)
            return PropertyBuffer;
        else
        {
            free(PropertyBuffer);
            return NULL;
        }
    }
    else
        return NULL;
}
else
    return NULL;

}

解决方案

如果设备没有提供名称信息,就会返回空

时间: 2024-09-17 04:42:25

VC6.0 获取设备友好名称 (Friendly Name)的相关文章

iOS App开发中通过UIDevice类获取设备信息的方法_IOS

UIDevice提供了多种属性.类函数及状态通知,帮助我们全方位了解设备状况.从检测电池电量到定位设备与临近感应,UIDevice所做的工作就是为应用程序提供用户及设备的一些信息.UIDevice类还能够收集关于设备的各种具体细节,例如机型及iOS版本等.其中大部分属性都对开发工作具有积极的辅助作用.下面的代码简单的使用UIDevice获取手机属性. 简单示例:设备相关信息的获取   NSString *strName = [[UIDevice currentDevice] name];   N

图像处理-vc6.0编程问题:怎么改窗口名称??

问题描述 vc6.0编程问题:怎么改窗口名称?? 如图所示,本人小白,做课题时感觉应用程序自动生成的标题实在是过于单调,想修改下标题,如"图像处理系统"之类的,本来我想,生成标题的程序代码应该在某个cpp中,那个cpp文件里面估计有什么setwindowtittle之类的函数,于是就到各个cpp中去查找,结果一无所获.所以想请问大神,系统设置名称的程序在什么文件中(我建立的是一个多文档应用程序) 如果想修改"119064216--Blood.bmp"为"图

获取设备IMEI ,手机名称,系统SDK版本号,系统版本号

1.获取设备IMEI TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String IMEIs = tm.getDeviceId() ; 需要的权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" > </uses-permission>   运行结果:

VC6.0实现读取Excel数据的方法_C 语言

Excel是常用的办公软件之一,本文以Excel2003为例说明VC程序读取Excel文件的方法.具体步骤如下:  1.首先要将excel类添加到工程中. 在ClassWizard中,[Add Class],在Excel的安装目录找到Excel.exe(Microsoft2003是Excel.exe:2007应该又独立的lib库,这个没有验证),添加必要的几个类: // Excel应用对象 _Application m_oExcelApp; // Excel程序 _Worksheet m_oWo

STLFilt for VC6.0 安装工具

[摘要]在<C++ Templates>(David Vandevoorde, Nicolai M.Josuttis)一书的6.6.1节中,介绍了一个过滤编译STL代码的错误信息的小工具:STLFilt(由 Leor Zolman 编写).由于STL代码的错误和警告信息非常繁杂冗长(尤其在VC6.0中),不利于程序员阅读,所以这个工具显得很有用.不过它的安装和配置却很繁琐.工具包中提供了很多个 readme 英文文档来指导用户进行安装和配置,但是必须要关注的配置文件细节等等,仍然需要耗费很大精

GPGPU OpenCL 获取设备信息

在使用OpenCL编程中,需要对GPU设备的底层理解,这样才能更好的进行代码优化. 比如计算单元CU数量,每个CU的执行单元PE数量,每个CU中的共享内存大小等等.只有了解了这些才能更好的使用共享内存,设计核函数的运行参数等. 本文:http://www.cnblogs.com/xudong-bupt/p/3586050.html  1.clGetDeviceInfo OpenCL使用clGetDeviceInfo函数获取设备具体,函数原型如下: cl_int clGetDeviceInfo (

为什么程序在vc6.0编译通过并且运行正确但是在编程挑战时提交后却是运行结果不对

问题描述 为什么程序在vc6.0编译通过并且运行正确但是在编程挑战时提交后却是运行结果不对 编程挑战试了几次都是结果不对,但是我在vc6.0编译后运行的结果是正确的啊! 解决方案 这个有很多原因,比如说,你的程序本身有bug,虽然可以通过某些测试用例,但是oj使用的是另外的用例,没有通过,或者是你的程序在运行时间和使用内存上不符合要求,或者你的程序输入输出部分有问题,使得oj程序没法传递正确的测试用例,以及获取你的输出.还可能你使用了额外的库,而oj没有,你的编译器和oj的不同,造成编译上的细微

iOS获取设备IP地址

以前做过获取设备IP地址的功能,但是由于当时代码管理不当,很多代码已经遗失,现在只能重新过一遍,也让自己更有~~基情~~激情的学习.网上关于这方面的文章很多,但是找到自己真正需要的却不容易,经过几番周折.终于在著名的stackoverflow上面找到了我想要的答案. 代码如下: #import <ifaddrs.h> #import <arpa/inet.h> #import <net/if.h> #define IOS_CELLULAR @"pdp_ip0&

vc6.0如何在工程内调用另一个工程

问题描述 vc6.0如何在工程内调用另一个工程 就是说我有两个独立的工程,一个是系统界面软件,一个是接收数据的软件.我想要在系统界面中点击一个按钮打开接收数据的软件,并且在接收完成后再系统界面上显示下载完成.看到网上虽然可以在系统界面软件按钮处用Winexec或者ShellExecuteEx打开接收软件进行接收,但是不知道接收软件要怎么在下载完成后给系统界面一个返回值,用来执行显示下载完成,要在系统界面显示下载完成.还有一个办法就是合并,不过不知道具体怎么操作,是把Source Files,He