📄 dlgpgconfiguration.cpp
字号:
LocalHostInfo1 = (PGET_LOCAL_HOST_INFO1)&pGetLocalHostInfo->Information;
} else
{
PrintOut(NL"GetLocalHostInfo(UniqueID) failed"NL);
PrintError(Status);
}
LocalFree(pGetLocalHostInfo);//释放
}
if ( m_nEachValue == 1 ) //GET_HOST_CAPABILITIES GET_LOCAL_HOST_INFO2 主机性能标记
{
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO2);
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
pGetLocalHostInfo->Status = 0;
pGetLocalHostInfo->nLevel = GET_HOST_CAPABILITIES;
pGetLocalHostInfo->ulBufferSize = nLength;
// call driver (through class library)
DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
PGET_LOCAL_HOST_INFO2 LocalHostInfo2;
LocalHostInfo2 = (PGET_LOCAL_HOST_INFO2)&pGetLocalHostInfo->Information;
} else {
PrintOut(NL"GetLocalHostInfo(Capabilities) failed"NL);
PrintError(Status);
}
}
if ( m_nEachValue == 2 ) //GET_POWER_SUPPLIED GET_LOCAL_HOST_INFO3 电源
{
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO3);
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
pGetLocalHostInfo->Status = 0;
pGetLocalHostInfo->nLevel = GET_POWER_SUPPLIED;
pGetLocalHostInfo->ulBufferSize = nLength;
// call driver (through class library)
DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
PGET_LOCAL_HOST_INFO3 LocalHostInfo3;
LocalHostInfo3 = (PGET_LOCAL_HOST_INFO3)&pGetLocalHostInfo->Information;
} else {
PrintOut(NL"GetLocalHostInfo(PowerSupplied) failed"NL);
PrintError(Status);
}
}
if ( m_nEachValue == 3 ) //GET_PHYS_ADDR_ROUTINE GET_LOCAL_HOST_INFO4
{
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO4);
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
pGetLocalHostInfo->Status = 0;
pGetLocalHostInfo->nLevel = GET_PHYS_ADDR_ROUTINE;
pGetLocalHostInfo->ulBufferSize = nLength;
// call driver (through class library)
DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
PGET_LOCAL_HOST_INFO4 LocalHostInfo4;
LocalHostInfo4 = (PGET_LOCAL_HOST_INFO4)&pGetLocalHostInfo->Information;
} else {
PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
PrintError(Status);
}
}
if ( m_nEachValue == 4 ) //GET_HOST_CONFIG_ROM GET_LOCAL_HOST_INFO5
{
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO5);
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
pGetLocalHostInfo->Status = 0;
pGetLocalHostInfo->nLevel = GET_HOST_CONFIG_ROM;
pGetLocalHostInfo->ulBufferSize = nLength;
PGET_LOCAL_HOST_INFO5 LocalHostInfo5;
LocalHostInfo5 = (PGET_LOCAL_HOST_INFO5)&pGetLocalHostInfo->Information;
// call driver (through class library)
DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
}
else if( pGetLocalHostInfo->Status )//分配的缓冲区不够
{
// we should have our buffer info.
ULONG ulConfigRomLength;
ulConfigRomLength = LocalHostInfo5->ConfigRomLength;
LocalFree(pGetLocalHostInfo);
// start over with a big enough buffer
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO5) + ulConfigRomLength;
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
LocalHostInfo5 = (PGET_LOCAL_HOST_INFO5)&pGetLocalHostInfo->Information;
pGetLocalHostInfo->nLevel = GET_HOST_CONFIG_ROM;//5
pGetLocalHostInfo->ulBufferSize = nLength;
LocalHostInfo5->ConfigRomLength = ulConfigRomLength;
//分配足够的地址,再次发送IRP
Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
}
else
{
PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
PrintError(Status);
}
}
else
{
PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
PrintError(Status);
}
}
if ( m_nEachValue == 5 || m_nEachValue == 6 ) //GET_HOST_CSR_CONTENTS GET_LOCAL_HOST_INFO6
{
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO6);
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
pGetLocalHostInfo->nLevel = GET_HOST_CSR_CONTENTS;
pGetLocalHostInfo->ulBufferSize = nLength;
PGET_LOCAL_HOST_INFO6 LocalHostInfo6;
LocalHostInfo6 = (PGET_LOCAL_HOST_INFO6)&pGetLocalHostInfo->Information;
ULONG CsrDataAddress;
if( m_nEachValue == 5 )
CsrDataAddress = SPEED_MAP_LOCATION;
else if( m_nEachValue == 6 )
CsrDataAddress = TOPOLOGY_MAP_LOCATION;
LocalHostInfo6->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
LocalHostInfo6->CsrBaseAddress.Off_Low = CsrDataAddress;
pGetLocalHostInfo->Status = CsrDataAddress;
// call driver (through class library)
DWORD Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
}
else if( pGetLocalHostInfo->Status )//分配的缓冲区不够
{
// we should have our buffer info.
ULONG CsrDataLength;
CsrDataLength = LocalHostInfo6->CsrDataLength;
LocalFree(pGetLocalHostInfo);
// start over with a big enough buffer
nLength = sizeof(GET_LOCAL_HOST_INFORMATION) + sizeof(GET_LOCAL_HOST_INFO6) + CsrDataLength;
pGetLocalHostInfo = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, nLength);
LocalHostInfo6 = (PGET_LOCAL_HOST_INFO6)&pGetLocalHostInfo->Information;
pGetLocalHostInfo->nLevel = GET_HOST_CSR_CONTENTS;//6
pGetLocalHostInfo->ulBufferSize = nLength;
LocalHostInfo6->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
LocalHostInfo6->CsrBaseAddress.Off_Low = CsrDataAddress;
LocalHostInfo6->CsrDataLength = CsrDataLength;
//分配足够的地址,再次发送IRP
Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
if ( Status == STATUS_SUCCESS && pGetLocalHostInfo->Status == 0 )
{
// display information
PrintOut("get host success"NL);
if (LocalHostInfo6->CsrBaseAddress.Off_Low == SPEED_MAP_LOCATION)//需要得到node count
{
PSPEED_MAP SpeedMap;
PGET_LOCAL_HOST_INFORMATION pGetTopologyMap;
PGET_LOCAL_HOST_INFO6 pTopologyInfo;
PTOPOLOGY_MAP TopologyMap;
ULONG NodeCount, i, j;
SpeedMap = (PSPEED_MAP)&LocalHostInfo6->CsrDataBuffer;
// get the node count from the topology map
pGetTopologyMap = (PGET_LOCAL_HOST_INFORMATION)LocalAlloc(LPTR, sizeof(GET_LOCAL_HOST_INFO6) + 4096);
pGetTopologyMap->ulBufferSize = sizeof(GET_LOCAL_HOST_INFO6) + 4096;
pGetTopologyMap->nLevel = 6;
pTopologyInfo = (PGET_LOCAL_HOST_INFO6)&pGetTopologyMap->Information;
pTopologyInfo->CsrDataLength = 4096; //0x400;
pTopologyInfo->CsrBaseAddress.Off_High = INITIAL_REGISTER_SPACE_HI;
pTopologyInfo->CsrBaseAddress.Off_Low = TOPOLOGY_MAP_LOCATION;
Status = g_CurrentDev.GetLocalHostInfo(pGetLocalHostInfo);
TopologyMap = (PTOPOLOGY_MAP)&pTopologyInfo->CsrDataBuffer;
NodeCount = TopologyMap->TOP_Node_Count;
LocalFree(TopologyMap);
//得到node count,显示
}
if (LocalHostInfo6->CsrBaseAddress.Off_Low == TOPOLOGY_MAP_LOCATION)
{
}
}
else
{
PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
PrintError(Status);
}
}
else
{
PrintOut(NL"GetLocalHostInfo(ConfigRom) failed"NL);
PrintError(Status);
}
}
LocalFree(pGetLocalHostInfo);
}
}
void CDlgPgConfiguration::OnButtonHcSet()
{
/*
typedef struct _SET_LOCAL_HOST_PROPERTIES
{
ULONG Type;
union
{
struct
{
ULONG GapCountLowerBound;
} HCPropGapCountLowerBound;
} u;
} SET_LOCAL_HOST_PROPERTIES,*PSET_LOCAL_HOST_PROPERTIES;
*/
SET_LOCAL_HOST_PROPERTIES SetLocalHostPro;
if ( UpdateData(TRUE) )
{
if ( m_CheckHCSetGapCount )
{
SetLocalHostPro.Type = SET_LOCAL_HOST_PROPERTIES_GAP_COUNT;
SetLocalHostPro.u.HCPropGapCountLowerBound.GapCountLowerBound = m_ValHCGapCount;
// call driver (through class library)
DWORD Status = g_CurrentDev.SetLocalHostProperties(&SetLocalHostPro);
if (Status == STATUS_SUCCESS)
{
PrintOut("New Host Controller Gap Count Bound successfully set"NL);
}
else
{
PrintOut(NL"SetLocalHostProperties(GapCountLowerBound) failed"NL);
PrintError(Status);
}
PrintOut(NL);
}
}
}
void CDlgPgConfiguration::OnCheckHCGapCount()
{
UpdateEditBoxesStates();
}
void CDlgPgConfiguration::UpdateCheckBoxes()
{
if ( m_ValUnitDirSize == 0 )
{
m_ButtonGetUnitDir.EnableWindow(FALSE);
} else {
m_ButtonGetUnitDir.EnableWindow(TRUE);
}
if ( m_ValUnitDepDirSize == 0 )
{
m_ButtonGetUnitDepDir.EnableWindow(FALSE);
} else {
m_ButtonGetUnitDepDir.EnableWindow(TRUE);
}
if ( m_ValVendorLeafSize == 0 )
{
m_ButtonGetVendorLeaf.EnableWindow(FALSE);
} else {
m_ButtonGetVendorLeaf.EnableWindow(TRUE);
}
if ( m_ValModelLeafSize == 0 )
{
m_ButtonGetModelLeaf.EnableWindow(FALSE);
} else {
m_ButtonGetModelLeaf.EnableWindow(TRUE);
}
}
void CDlgPgConfiguration::UpdateEditBoxesStates()
{
if ( m_ButtonHCSetGapCount.GetCheck()==0 )
{
// checkbox is unchecked
m_EditCtrlHCGapCountValue.EnableWindow(FALSE);
}
else
{
m_EditCtrlHCGapCountValue.EnableWindow(TRUE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -