DMDLL_PCIGetBaseResources
대상이 되는 하드웨어를 위해서 준비된 BaseAddress정보와 매핑된 가상주소정보를 리턴합니다
Description
int DMDLL_PCIGetBaseResources(
IN DMHANDLE OpenedHandle,
OUT int Type[],
OUT DMIICORE_RESOURCE Resources,
OUT PVOID VirtualAddress[],
OUT int *pResourceCount
)
Parameters
OpenedHandle
작업중이던 디바이스 핸들, DMDLL_OpenDeviceForInterfaceDeviceStack()함수를 통해서 얻은 권한핸들이어야 합니다
Type
해당하는 리소스가 물리메모리인지 아니면 Port IO주소인지를 알려줍니다
#define CmResourceTypePort 1 // ResType_IO (0x0002)
#define CmResourceTypeMemory 3 // ResType_Mem (0x0001)
Resources
해당하는 PCI 디바이스에게 할당된 물리메모리, Port IO 주소에 대한 정보를 얻습니다
VirtualAddress
해당하는 PCI 디바이스에게 할당된 물리메모리와 매핑된 가상주소정보를 얻습니다
pResourceCount
얻고자 하는 리소스개수를 의미하며, 동시에 실제 존재하는 리소스개수가 리턴됩니다
Return Values
return int
작업이 성공할 경우 DMSTAT_SUCCESS 리턴
Changelog
Examples
int Type[MAXRESOURCES];
DMIICORE_RESOURCE Resources[MAXRESOURCES];
PVOID VirtualAddress[MAXRESOURCES];
int ResourceCount = MAXRESOURCES;
dmStatus = DMDLL_PCIGetBaseResources(
DMHandle, Type, Resources, VirtualAddress, &ResourceCount);
if (dmStatus != DMSTAT_SUCCESS)
return;
// ResourceCount 변수는 현재 PCI하드웨어가 가진 리소스의 개수를 담고 있습니다
for (int count = 0; count < ResourceCount; count++)
{
if (Type[count] == CmResourceTypePort)
{
// Port IO Type의 리소스입니다
mTempString.Format(L"0x%I64X",
Resources[count].u.Port.Start.QuadPart);
mTempString.Format(L"0x%8X",
Resources[count].u.Port.Length);
}
else if (Type[count] == CmResourceTypeMemory)
{
// Memory Type의 리소스입니다
mTempString.Format(L"0x%I64X",
Resources[count].u.Memory.Start.QuadPart);
mTempString.Format(L"0x%8X",
Resources[count].u.Memory.Length);
mTempString.Format(L"0x%8X", VirtualAddress[count]);
}
}