English 中文(简体)
Leverging Remote Assistance in Vista
原标题:

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)
问题回答

暂无回答




相关问题
Screentoaster, how do they do it?

I need to develop a browser based application that record the user screen, much preferably on flv. Also doing that with java would be perfect. That s exactly what they accomplished at screentoaster....

Leverging Remote Assistance in Vista

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 ...

Does Monitoring An Excel Spreadsheet Via RDP Make It Slower?

We have a massive spreadsheet which does a lot of calculations and not much drawing / writing to spreadsheets My question is : Does monitoring the spreadsheet whilst it is running via RDP actually ...

Determine Remote Desktop Protocol version programmatically?

Remote Desktop Protocol version 6.1 changed the way RDP sessions are handled (making session 0, which previously meant "console session", into a non-interactive session). I need to be able to figure ...

热门标签