Windows通过命令行获取PCIE设备配置空间、CPU/DISK、特定程序CPU占用率

系统:Windows XP IOT (EMT...)

工具:pstool (32位)、RW

环境:CMD

例子代码如下:

@echo on
@REM 切换到当前文件夹路径
cd /d "%~dp0"
@rem "获取CPU使用率"
@REM typeperf  "\Processor(_Total)\%% Processor Time" -sc 1  > cpu.log
@REM for /f "skip=2 tokens=2 delims=," %%a in ('find /V "" ^< cpu.log') do (
@REM     set "CPU_USAGE=%%a"
@REM )
wmic path Win32_PerfFormattedData_PerfOS_Processor get Name,PercentProcessorTime > cpu.log
for /f "skip=5 tokens=2 delims= " %%a in ('type cpu.log') do (
    set "CPU_USAGE=%%a"
)
@rem "获取内存使用情况(总物理内存与可用内存计算使用率)"
for /f "tokens=2 delims==" %%a in ('wmic OS get TotalVisibleMemorySize /value') do set TOTAL_MEM=%%a
for /f "tokens=2 delims==" %%b in ('wmic OS get FreePhysicalMemory /value') do set FREE_MEM=%%b
set /a MEM_USAGE=((%TOTAL_MEM%-%FREE_MEM%)*100/%TOTAL_MEM%)

@REM  创建一个临时文件名
set "tempFile=%CD%\temp.txt"
@REM 在后台执行pslist并将输出重定向到临时文件
.\PSTools\pslist.exe -s 2 IPCWork > "%tempFile%"
for /f "skip=7 tokens=3 delims= " %%a in ('type %tempFile%') do (
    set "IPCWORK_CPU_USAGE=%%a"
    goto :breakLoop
)
:breakLoop
@REM  "将结果写入文件"
type nul > log.txt 
echo %date% >>SystemStats.txt
echo System CPU Usage: %CPU_USAGE%%%  >>log.txt
echo Memory Usage: %MEM_USAGE%%% >> log.txt
echo IPCWork.exe CPU Usage: %IPCWORK_CPU_USAGE%%% >> log.txt
@REM 删除临时文件
del cpu.log
del "%tempFile%"
pause
@REM RW读写PCIE设备配置空间
setlocal enabledelayedexpansion
set "pci_tree_file=pci_tree.log"
set "result_log=log.txt"
set "newline=^"
@REM 导出pcie信息
Rw.exe /Command="PCITREE" /stdout  /nologo > %pci_tree_file%
@REM 清空result.log上一次的结果
type nul > %result_log%
@REM 从pcie树信息中提取BDF,并使用RW指令输出PCIE配置空间信息到result.log
 for /f "skip=1 tokens=2,4,6 delims=, " %%a in (%pci_tree_file%) do (
        echo Bus: %%a Device: %%b Function: %%c
        echo Bus: %%a Device: %%b Function: %%c >> %result_log%
        Rw.exe /Command="SAVE a.rw PCI 0x%%a 0x%%b 0x%%c"  /stdout /nologo >> %result_log%  
        echo !newline!  >> %result_log%
) 
del %pci_tree_file%

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取PCIe配置空间,可以使用Windows API函数来读取和写入PCIe设备配置空间寄存器。以下是一些相关的Windows API函数: 1. CreateFile() - 用于打开设备文件,返回文件句柄。 2. DeviceIoControl() - 用于从设备文件中读取或写入数据。 3. CloseHandle() - 用于关闭设备文件。 下面是一个简单的示例代码,可以使用它来读取PCIe设备配置空间: ```c++ #include <windows.h> #include <winioctl.h> #define IOCTL_PCI_READ_CONFIG CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_PCI_WRITE_CONFIG CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) HANDLE hDevice = INVALID_HANDLE_VALUE; DWORD dwBytesReturned; hDevice = CreateFile(L"\\\\.\\PCI", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDevice == INVALID_HANDLE_VALUE) { printf("Error opening device! Error code: %d\n", GetLastError()); return 1; } // Read the vendor ID from the device configuration space DWORD dwVendorID = 0; if (!DeviceIoControl(hDevice, IOCTL_PCI_READ_CONFIG, &dwVendorID, sizeof(DWORD), &dwVendorID, sizeof(DWORD), &dwBytesReturned, NULL)) { printf("Error reading device configuration space! Error code: %d\n", GetLastError()); CloseHandle(hDevice); return 1; } // Write to the device configuration space DWORD dwData = 0x12345678; if (!DeviceIoControl(hDevice, IOCTL_PCI_WRITE_CONFIG, &dwData, sizeof(DWORD), NULL, 0, &dwBytesReturned, NULL)) { printf("Error writing device configuration space! Error code: %d\n", GetLastError()); CloseHandle(hDevice); return 1; } CloseHandle(hDevice); ``` 这个示例代码打开一个PCI设备文件,并读取/写入设备配置空间中的数据。注意,这个示例代码只是演示如何使用Windows API函数来访问PCIe设备配置空间,实际应用中可能需要根据具体的硬件设备进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值