开发者

Leverging Remote Assistance in Vista

开发者 https://www.devze.com 2022-12-18 02:00 出处:网络
On Windows XP there is a known way to create a Remote Assistance Ticket. http://msdn.microsoft.com/en-us/library/ms811079.开发者_高级运维aspx

On Windows XP there is a known way to create a Remote Assistance Ticket.

http://msdn.microsoft.com/en-us/library/ms811079.开发者_高级运维aspx

But on Vista this does not appear to work. How does one do this on Vista or Windows 7?


There turns out to be two ways. The Microsoft API is called IRASrv and is documented here:

http://msdn.microsoft.com/en-us/library/cc240176(PROT.10).aspx

Another way is to simply call msra.exe. with password and novice params (e.g. msra.exe /saveasfile testfile thepassword). However that does prompt the user with the password dialog.

Here is example code for calling the IRASrv interface and generating a Remote Assistance Connection String.

COSERVERINFO            si; ::ZeroMemory( &si, sizeof( si ) );
MULTI_QI                qi; ::ZeroMemory( &qi, sizeof( qi ) );

HRESULT hr = S_OK;

BSTR bstrUserName     = SysAllocString(L"jon");
BSTR bstrDomainName   = SysAllocString(L"");
BSTR bstrPasswordStr     = SysAllocString(L"testpass");

// Get the security information entered by the user
_bstr_t bstrUser(bstrUserName);
_bstr_t bstrDomain(bstrDomainName);
_bstr_t bstrPassword(bstrPasswordStr);

// Set AuthIdentity
SEC_WINNT_AUTH_IDENTITY_W AuthIdentity = {
    (unsigned short*)bstrUserName,
    bstrUser.length(),
    (unsigned short*)bstrDomainName,
    bstrDomain.length(),
    (unsigned short*)bstrPasswordStr,
    bstrPassword.length(),
    SEC_WINNT_AUTH_IDENTITY_UNICODE 
};
COAUTHINFO AuthInfo = {
    RPC_C_AUTHN_WINNT, 
    RPC_C_AUTHZ_DEFAULT, 
    NULL, 
    RPC_C_AUTHN_LEVEL_PKT_PRIVACY,  // The authentication level used
    RPC_C_IMP_LEVEL_IMPERSONATE, 
    (COAUTHIDENTITY*)&AuthIdentity,
    EOAC_NONE 
};

si.pAuthInfo = &AuthInfo;
si.pwszName = bstrMachineName;
qi.pIID     = &(__uuidof(RAServerLib::IRASrv));

hr = ::CoCreateInstanceEx(
    __uuidof(RAServerLib::RASrv), NULL, CLSCTX_REMOTE_SERVER, 
    &si, 1, &qi );
if (FAILED(hr))
{
    return hr;
}
CComPtr<RAServerLib::IRASrv> prasrv;
hr = qi.pItf->QueryInterface(__uuidof(RAServerLib::IRASrv), (void**)&prasrv);
if (FAILED(hr))
{
    return hr;
}

LPWSTR pstr=NULL;

hr = prasrv->raw_GetNoviceUserInfo(&pstr);
if (FAILED(hr))
{
    return hr;
}
    pstr contains the Remote Assistance Connection String (type 2)
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号