K
KmeT
Вообщем не получается подкулючить WMI к удаленной машине. Хотя как бы все делал по мсдн. Может не учел какие нюансы, это мой первый опыт испоьзования данной технологии
Вводные: WinXP SP2, отключеный встроенный браундмаузер, используется логин(stUser) и пароль(stPass) пользователя входящего в группу администаторов, пароль не пустой. (stServ)-удаленная машина
Вводные: WinXP SP2, отключеный встроенный браундмаузер, используется логин(stUser) и пароль(stPass) пользователя входящего в группу администаторов, пароль не пустой. (stServ)-удаленная машина
Код:
bool CPrcMng::Connect(const BSTR stServ, const BSTR stUser, const BSTR stPass)
{
if (!m_bInitSec)
{
if (!InitSecurity()) return false;
}
BSTR stNetR[MAX_PATH]={0};
BSTR stUserBuf[MAX_PATH]={0};
if (!stServ)
{
wcscpy((BSTR)stNetR, NAMESPACE);
wcscpy((BSTR)stUserBuf, stUser);
}
else
{
wcscpy((BSTR)stNetR, L"\\\\");
wcscat((BSTR)stNetR, stServ);
wcscat((BSTR)stNetR, L"\\");
wcscat((BSTR)stNetR, NAMESPACE);
wcscpy((BSTR)stUserBuf, stServ);
wcscat((BSTR)stUserBuf, L"\\");
wcscat((BSTR)stUserBuf, stUser);
}
if (m_bConnected)
{
m_cWSvc.Release();
m_bConnected=false;
}
IWbemLocator
HRESULT hres=m_cWL->ConnectServer((BSTR)stNetR, (BSTR)stUserBuf, stPass,
0, // Locale. NULL indicates current locale
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object (IWbemContext), if required
&m_cWSvc // Out: pointer to IWbemServices proxy
);
if (FAILED(hres)) return false;
m_bConnected=true;
hres = CoSetProxyBlanket(
m_cWSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx authentication service
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx authorization service
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx authentication level
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx impersonation level
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
m_bConnected=false;
m_cWSvc.Release();
}
return m_bConnected;
}
bool CPrcMng::InitSecurity()
{
HRESULT hres = CoInitializeSecurity(
NULL,
-1, // COM negotiates authentication service
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_PKT, // Default authentication (recommended)
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation (recommended)
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres)) m_bInitSec=false;
else m_bInitSec=true;
return m_bInitSec;
}