Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "precomp.h"
#pragma hdrstop
typedef DWORD (APIENTRY *T_PCIINFO)( ULONG BusNumber, ULONG SlotNumber, ULONG Offset, ULONG Length, PVOID Data );
typedef struct _PCI_SLOT_NUMBER { union { struct { ULONG DeviceNumber:5; ULONG FunctionNumber:3; ULONG Reserved:24; } bits; ULONG AsULONG; } u; } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
extern CHAR ReturnTextBuffer[1024];
/*
GetPCISlotInformation - Get PCI information. The user must passed 3 arguments to the function. 1st argument - bus number 2rd argument - slot number
It will return a string as: {VendorID, DeviceID}
*/
BOOL GetPciInformation( IN DWORD cArgs, IN LPSTR Args[], OUT LPSTR *TextOut )
{ static HMODULE mDtect = NULL; static T_PCIINFO pProc = NULL;
ULONG BusNum = atol( Args[0] ); ULONG Device = atol( Args[1] ); ULONG Function = atol( Args[2] );
USHORT usVendor = 0; USHORT usDevice = 0;
TCHAR buf[100];
lstrcpy( ReturnTextBuffer, "{" );
if ( mDtect == NULL ) mDtect = LoadLibrary("netdtect.dll");
if ( mDtect != NULL ) { if ( pProc == NULL ) pProc = (T_PCIINFO)GetProcAddress( mDtect, "DetectReadPciSlotInformation" );
if ( pProc != NULL ) {
PCI_SLOT_NUMBER pciSlot;
pciSlot.u.AsULONG = Device; pciSlot.u.bits.DeviceNumber = Device; pciSlot.u.bits.FunctionNumber = Function;
(*(T_PCIINFO)pProc)( BusNum, pciSlot.u.AsULONG, 0, sizeof(USHORT), &usVendor); (*(T_PCIINFO)pProc)( BusNum, pciSlot.u.AsULONG, sizeof(USHORT), sizeof(USHORT), &usDevice); } }
wsprintf( buf, "\"%d\",\"%d\"", usVendor, usDevice );
lstrcat( ReturnTextBuffer, buf ); lstrcat( ReturnTextBuffer, "}" ); *TextOut = ReturnTextBuffer;
return TRUE; }
|