C语言监视进程,C:在Windows中监视进程创建和终止

为了使用单个WQL语句检测进程的创建和终止,您可以像这样使用__InstanceOperationEvent类.

Select * From __InstanceOperationEvent Within 1 Where TargetInstance ISA Win32_Process

然后,如果要确定到达的事件的类型(类),则必须确定__Class属性.

试试这个样本

HRESULT EventSink::Indicate(long lObjectCount,

IWbemClassObject **apObjArray)

{

HRESULT hr = S_OK;

_variant_t vtProp;

for (int i = 0; i < lObjectCount; i++)

{

bool CreateorDel = false;

_variant_t cn;

hr = apObjArray[i]->Get(_bstr_t(L"__Class"), 0, &cn, 0, 0);

if (SUCCEEDED(hr))

{

wstring LClassStr(cn.bstrVal);

if (0 == LClassStr.compare(L"__InstanceDeletionEvent") )

{

wcout << "Deletion" << endl;

CreateorDel = true;

}

else if (0 == LClassStr.compare(L"__InstanceCreationEvent"))

{

wcout << "Creation" << endl;

CreateorDel = true;

}

else

{

CreateorDel = false;

//wcout << "Modification " << endl;

}

}

VariantClear(&cn);

if (CreateorDel)

{

hr = apObjArray[i]->Get(_bstr_t(L"TargetInstance"), 0, &vtProp, 0, 0);

if (!FAILED(hr))

{

IUnknown* str = vtProp;

hr = str->QueryInterface( IID_IWbemClassObject, reinterpret_cast< void** >( &apObjArray[i] ) );

if ( SUCCEEDED( hr ) )

{

_variant_t cn;

hr = apObjArray[i]->Get( L"Name", 0, &cn, NULL, NULL );

if ( SUCCEEDED( hr ) )

{

if ((cn.vt==VT_NULL) || (cn.vt==VT_EMPTY))

wcout << "Name : " << ((cn.vt==VT_NULL) ? "NULL" : "EMPTY") << endl;

else

wcout << "Name : " << cn.bstrVal << endl;

}

VariantClear(&cn);

hr = apObjArray[i]->Get( L"Handle", 0, &cn, NULL, NULL );

if ( SUCCEEDED( hr ) )

{

if ((cn.vt==VT_NULL) || (cn.vt==VT_EMPTY))

wcout << "Handle : " << ((cn.vt==VT_NULL) ? "NULL" : "EMPTY") << endl;

else

wcout << "Handle : " << cn.bstrVal << endl;

}

VariantClear(&cn);

}

}

VariantClear(&vtProp);

}

}

return WBEM_S_NO_ERROR;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值