|
发表于 2025-5-28 16:46:25
|
显示全部楼层
福建省厦门市
.版本 2
.支持库 spec
.子程序 取进程命令行_WMI
.参数 进程名称, 文本型, 可空, e.exe
.局部变量 hr, 整数型
.局部变量 pLoc, IWbemLocator
.局部变量 pSvc, IWbemServices
.局部变量 v, 整数型
.局部变量 cha询语句, 文本型
.局部变量 pEnumerator, IEnumWbemClassObject
.局部变量 pclsObj, IWbemClassObject
.局部变量 uReturn, 整数型
.局部变量 vtProp, 字节集
.局部变量 vt, 整数型
.局部变量 pType, 整数型
.局部变量 plFlavor, 整数型
.局部变量 pvarg, 整数型
.局部变量 ptr, 整数型
' 初始化 COM
hr = CoInitializeEx (0, #COINIT_MULTITHREADED)
.如果真 (hr = -2147417850) ' 线程占用
CoUninitialize ()
hr = CoInitializeEx (0, #COINIT_MULTITHREADED)
.如果真结束
.如果真 (hr < 0)
调试输出 (“COM 初始化失败: ”, hr)
返回 ()
.如果真结束
' 设置安全级别
hr = CoInitializeSecurity (0, -1, 0, 0, #RPC_C_AUTHN_LEVEL_DEFAULT, #RPC_C_IMP_LEVEL_IMPERSONATE, 0, #EOAC_NONE, 0)
' 创建 WMI 连接
hr = CoCreateInstance (pLoc.CLSID (), 0, #CLSCTX_INPROC_SERVER, pLoc.uuid (), pLoc.地址 ())
.如果真 (hr < 0)
CoUninitialize ()
返回 ()
.如果真结束
hr = pLoc.ConnectServer (编码转换.文本到宽文本 (“ROOT\CIMV2”), , , , , , , pSvc)
' hr = pLoc.ConnectServer (编码转换.文本到宽文本 (“ROOT\DEFAULT”), , , , , , , pSvc)
.如果真 (hr < 0)
CoUninitialize ()
返回 ()
.如果真结束
' 设置代理安全级别
hr = CoSetProxyBlanket (pSvc.this (), #RPC_C_AUTHN_WINNT, #RPC_C_AUTHZ_NONE, 0, #RPC_C_AUTHN_LEVEL_CALL, #RPC_C_IMP_LEVEL_IMPERSONATE, 0, #EOAC_NONE)
' 执行 WQL cha询
.判断开始 (取反 (是否为空 (进程名称)))
cha询语句 = “SELECT CommandLine FROM Win32_Process” + “ WHERE Name = '” + 进程名称 + “'”
.默认
cha询语句 = “SELECT CommandLine FROM Win32_Process”
.判断结束
hr = pSvc.ExecQuery (编码转换.文本到宽文本 (“WQL”), 编码转换.文本到宽文本 (cha询语句), 位或 (#WBEM_FLAG_FORWARD_ONLY, #WBEM_FLAG_RETURN_IMMEDIATELY), , pEnumerator)
.如果真 (hr < 0)
pSvc.Release ()
CoUninitialize ()
返回 ()
.如果真结束
.判断循环首 (真)
hr = pEnumerator.Next (#WBEM_INFINITE, 1, pclsObj, uReturn)
.如果真 (uReturn = 0)
跳出循环 ()
.如果真结束
' 获取管道属性
vtProp = 取空白字节集 (16)
hr = pclsObj.Get (编码转换.文本到宽文本 (“CommandLine”), , vtProp, pType, plFlavor)
vt = 取字节集数据 (vtProp, #整数型, 1)
.判断开始 (vt ≠ #VT_NULL)
.判断开始 (pType = #CIM_STRING)
ptr = 取字节集数据 (vtProp, #整数型, 9)
调试输出 (编码转换.宽文本到文本 (指针到字节集 (ptr, __getPtrLen (ptr))))
.默认
调试输出 (pType, plFlavor, vtProp)
.判断结束
.默认
' 调试输出 (“**** VT ****”, vt, vtProp)
.判断结束
pclsObj.Release ()
.判断循环尾 ()
pSvc.Release ()
pLoc.Release ()
pEnumerator.Release ()
CoUninitialize ()
调试输出 (“========================= ok ============================”)
|
|