////////////////////////////////////////////////////////////////
// File - PCI_SCAN.C
//
// A utility for getting a list of the PCI cards installed
// and the resources allocated for each one of them (memory
// ranges, IO ranges and interrupts).
//
////////////////////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include <winioctl.h>
#include "..\windrvr.h"
HANDLE hWD;
void print_card_info(WD_PCI_SLOT pciSlot)
{
WD_PCI_CARD_INFO pciCardInfo;
DWORD i;
pciCardInfo.pciSlot = pciSlot;
WD_PciGetCardInfo (hWD, &pciCardInfo);
for (i=0; i<pciCardInfo.Card.dwItems; i++)
{
WD_ITEMS item = pciCardInfo.Card.Item[i];
printf (" Item ",i);
switch (item.item)
{
case ITEM_MEMORY:
printf ("Memory: range 0x%x-0x%x",
item.I.Mem.dwPhysicalAddr, item.I.Mem.dwPhysicalAddr+item.I.Mem.dwBytes-1);
break;
case ITEM_IO:
printf ("IO: range 0x%x-0x%x",
item.I.IO.dwAddr, item.I.IO.dwAddr+item.I.IO.dwBytes-1);
break;
case ITEM_INTERRUPT:
printf ("Interrupt: irq %d", item.I.Int.dwInterrupt);
break;
default:
printf ("Invalid item type");
break;
}
printf ("\n");
}
}
int main (int argc, char *argv[])
{
WD_VERSION ver;
WD_PCI_SCAN_CARDS pciScan;
WD_PCI_SLOT pciSlot;
WD_PCI_ID pciId;
DWORD i;
hWD=WD_Open();
if (hWD==INVALID_HANDLE_VALUE)
{
printf("Error: Cannot open WinDriver device\n");
exit(1);
}
WD_Version(hWD,&ver);
if (ver.dwVer!=WD_VER)
{
printf ("Error: incorrect WINDRVR version. needs ver %d\n",WD_VER);
exit(1);
}
else
{
printf("Using %s\n",ver.cVer);
}
pciScan.searchId.dwVendorId = 0;
pciScan.searchId.dwDeviceId = 0;
printf ("Pci bus scan:\n\n");
WD_PciScanCards (hWD,&pciScan);
for (i=0; i<pciScan.dwCards; i++)
{
pciId = pciScan.cardId[i];
pciSlot = pciScan.cardSlot[i];
printf("Bus %d Slot %d Function %d, VendorID %04x DeviceID %04x\n",
pciSlot.dwBus, pciSlot.dwSlot, pciSlot.dwFunction, pciId.dwVendorId, pciId.dwDeviceId);
print_card_info(pciSlot);
printf("\n");
}
WD_Close(hWD);
return 0;
}
このサイトでは、サイトや広告を改善するために Cookie を使用します。サイトを利用することで、Cookie の使用に同意するものといたします。詳細は
プライバシーについてをご覧ください。