VC 获取USB设备接口描述符?

VC 获取USB设备接口描述符?,第1张

在驱动里面可以皮洞通燃盯枯过UsbBuildGetDescriptorRequest获得,然后vc程序通过DeviceIoControl把驱动中的设则判备描述信息读到应用程序中即可。

下面这段代码演示了列举出当前系统中所有的进程,以档乱敏及进程所引用的文件路径。行枝给你一个参考。

#include <windows.h>

#include <tlhelp32.h>

#include <stdio.h>

// Forward declarations:

BOOL GetProcessList( )

BOOL ListProcessModules( DWORD dwPID )

BOOL ListProcessThreads( DWORD dwOwnerPID )

void printError( TCHAR* msg )

void main( )

{

GetProcessList( )

}

BOOL GetProcessList( )

{

HANDLE hProcessSnap

HANDLE hProcess

PROCESSENTRY32 pe32

DWORD dwPriorityClass

// Take a snapshot of all processes in the system.

hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 )

if( hProcessSnap == INVALID_HANDLE_VALUE )

{

printError( "CreateToolhelp32Snapshot (of processes)"陪简 )

return( FALSE )

}

// Set the size of the structure before using it.

pe32.dwSize = sizeof( PROCESSENTRY32 )

// Retrieve information about the first process,

// and exit if unsuccessful

if( !Process32First( hProcessSnap, &pe32 ) )

{

printError( "Process32First" )// Show cause of failure

CloseHandle( hProcessSnap ) // Must clean up the

// snapshot object!

return( FALSE )

}

// Now walk the snapshot of processes, and

// display information about each process in turn

do

{

printf( "\n\n"

"=====================================================" )

printf( "\nPROCESS NAME: %s", pe32.szExeFile )

printf( "\n"

"-----------------------------------------------------" )

// Retrieve the priority class.

dwPriorityClass = 0

hProcess = OpenProcess(

PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID )

if( hProcess == NULL )

printError( "OpenProcess" )

else

{

dwPriorityClass = GetPriorityClass( hProcess )

if( !dwPriorityClass )

printError( "GetPriorityClass" )

CloseHandle( hProcess )

}

printf( "\n process ID= 0x%08X", pe32.th32ProcessID )

printf( "\n thread count = %d", pe32.cntThreads )

printf( "\n parent process ID = 0x%08X",

pe32.th32ParentProcessID )

printf( "\n Priority Base = %d", pe32.pcPriClassBase )

if( dwPriorityClass )

printf( "\n Priority Class= %d", dwPriorityClass )

// List the modules and threads associated with this process

ListProcessModules( pe32.th32ProcessID )

ListProcessThreads( pe32.th32ProcessID )

} while( Process32Next( hProcessSnap, &pe32 ) )

CloseHandle( hProcessSnap )

return( TRUE )

}

BOOL ListProcessModules( DWORD dwPID )

{

HANDLE hModuleSnap = INVALID_HANDLE_VALUE

MODULEENTRY32 me32

// Take a snapshot of all modules in the specified process.

hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID )

if( hModuleSnap == INVALID_HANDLE_VALUE )

{

printError( "CreateToolhelp32Snapshot (of modules)" )

return( FALSE )

}

// Set the size of the structure before using it.

me32.dwSize = sizeof( MODULEENTRY32 )

// Retrieve information about the first module,

// and exit if unsuccessful

if( !Module32First( hModuleSnap, &me32 ) )

{

printError( "Module32First" )// Show cause of failure

CloseHandle( hModuleSnap ) // Must clean up the

// snapshot object!

return( FALSE )

}

// Now walk the module list of the process,

// and display information about each module

do

{

printf( "\n\n MODULE NAME: %s",

me32.szModule )

printf( "\n executable = %s",

me32.szExePath )

printf( "\n process ID = 0x%08X",

me32.th32ProcessID )

printf( "\n ref count (g) = 0x%04X",

me32.GlblcntUsage )

printf( "\n ref count (p) = 0x%04X",

me32.ProccntUsage )

printf( "\n base address = 0x%08X",

(DWORD) me32.modBaseAddr )

printf( "\n base size = %d",

me32.modBaseSize )

} while( Module32Next( hModuleSnap, &me32 ) )

CloseHandle( hModuleSnap )

return( TRUE )

}

BOOL ListProcessThreads( DWORD dwOwnerPID )

{

HANDLE hThreadSnap = INVALID_HANDLE_VALUE

THREADENTRY32 te32

// Take a snapshot of all running threads

hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 )

if( hThreadSnap == INVALID_HANDLE_VALUE )

return( FALSE )

// Fill in the size of the structure before using it.

te32.dwSize = sizeof(THREADENTRY32 )

// Retrieve information about the first thread,

// and exit if unsuccessful

if( !Thread32First( hThreadSnap, &te32 ) )

{

printError( "Thread32First" )// Show cause of failure

CloseHandle( hThreadSnap ) // Must clean up the

// snapshot object!

return( FALSE )

}

// Now walk the thread list of the system,

// and display information about each thread

// associated with the specified process

do

{

if( te32.th32OwnerProcessID == dwOwnerPID )

{

printf( "\n\n THREAD ID = 0x%08X",

te32.th32ThreadID )

printf( "\n base priority = %d", te32.tpBasePri )

printf( "\n delta priority = %d", te32.tpDeltaPri )

}

} while( Thread32Next(hThreadSnap, &te32 ) )

CloseHandle( hThreadSnap )

return( TRUE )

}

void printError( TCHAR* msg )

{

DWORD eNum

TCHAR sysMsg[256]

TCHAR* p

eNum = GetLastError( )

FormatMessage(

FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,

NULL, eNum,

MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default lang.

sysMsg, 256, NULL )

// Trim the end of the line and terminate it with a null

p = sysMsg

while( ( *p >31 ) || ( *p == 9 ) )

++p

do { *p-- = 0} while( ( p >= sysMsg ) &&

( ( *p == '.' ) || ( *p <33 ) ) )

// Display the message

printf( "\n WARNING: %s failed with error %d (%s)",

msg, eNum, sysMsg )

}

1、获取CPU名称:

获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取ProcessorNameString的键值。该注册表子键存储了当前计算机的处理器信息,如CPU名称、标识和厂商等。

void CSystemHardwareInfoDlg::OnButton1() 

{

CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"

CRegKey regKey

LONG lResult

lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS)

    //打开注册表主键   

    if (lResult!=ERROR_SUCCESS)//读取键值不成功   

    {  

        AfxMessageBox("错误:无法查询有关的注册表信息")  

        return  

    }  

    char chCPUName[50]  

    DWORD dwSize=50  

    regKey.QueryValue(chCPUName,"ProcessorNameString",&dwSize)  

    //获取RegisteredOwner的值   

    m_strCPUName=chCPUName  

    UpdateData(FALSE)  

    regKey.Close()//关闭注册表

}

2、获取CPU标识 :

获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取Identifier的键值。

void CSystemHardwareInfoDlg::OnButton2() 租旁凯

{

CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"

CRegKey regKey

LONG lResult

lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS)

    //打开注册表主键   

    if (lResult!=ERROR_SUCCESS)//读取键值启姿不成功   

    {  

        AfxMessageBox("错误:无法查询弊唤有关的注册表信息")  

        return  

    }  

    char chCPUID[50]  

    DWORD dwSize=50  

    regKey.QueryValue(chCPUID,"Identifier",&dwSize)  

    //获取RegisteredOwner的值   

    m_strCPUIdentifier=chCPUID  

    UpdateData(FALSE)  

    regKey.Close()//关闭注册表

}

3、获取CPU制造商名称 :

获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取VendorIdentifier的键值。

void CSystemHardwareInfoDlg::OnButton3() 

{

CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"

CRegKey regKey

LONG lResult

lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS)

    //打开注册表主键   

    if (lResult!=ERROR_SUCCESS)//读取键值不成功   

    {  

        AfxMessageBox("错误:无法查询有关的注册表信息")  

        return  

    }  

    char chVendor[50]  

    DWORD dwSize=50  

    regKey.QueryValue(chVendor,"VendorIdentifier",&dwSize)  

    //获取RegisteredOwner的值   

    m_strVendorID=chVendor  

    UpdateData(FALSE)  

    regKey.Close()//关闭注册表

}

4、获取CPU主频 :

获取HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0子键中获取~MHz的键值。注意为DWORD类型。

void CSystemHardwareInfoDlg::OnButton4() 

{

CString strPath="HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"

CRegKey regKey

LONG lResult

lResult=regKey.Open(HKEY_LOCAL_MACHINE,LPCTSTR(strPath),KEY_ALL_ACCESS)

    //打开注册表主键   

    if (lResult!=ERROR_SUCCESS)//读取键值不成功   

    {  

        AfxMessageBox("错误:无法查询有关的注册表信息")  

        return  

    }  

    DWORD dwMHz 

    DWORD dwSize=50  

    regKey.QueryValue(dwMHz,"~MHz")  

    //获取RegisteredOwner的值   

    m_nMHz=dwMHz  

    UpdateData(FALSE)  

    regKey.Close()//关闭注册表

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12351535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存