2010-01-20 7 views

Répondre

1

Il semble y avoir deux façons. L'API Microsoft est appelé IRASrv et est documenté ici:

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

Une autre façon est d'appeler simplement msra.exe. avec mot de passe et paramètres novices (par exemple, msra.exe/saveasfile testfile thepassword). Cependant, cela invite l'utilisateur avec la boîte de dialogue de mot de passe.

Voici un exemple de code pour appeler l'interface IRASrv et générer une chaîne de connexion d'assistance à distance.

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

Avez-vous des références sur l'utilisation de la "chaîne de connexion 2" pour lancer une connexion à distance? Le lien que vous avez publié sur MSDN contient de bonnes informations, mais ce n'est pas si simple. – Philip

+0

Consultez la [Spécification du protocole d'initiation de l'assistance à distance] (http://msdn.microsoft.com/fr-fr/library/cc240115 (v = prot.10) .aspx) En regardant le code que j'ai fait pour cela, J'ai extrait l'identifiant et le KH, et les utilise pour créer une chaîne de requête de style XP. –