Windows 7 利用Vista中的远程协助

Windows 7 利用Vista中的远程协助,windows-7,windows-vista,remote-desktop,Windows 7,Windows Vista,Remote Desktop,在Windows XP上,有一种创建远程协助票证的已知方法 但在Vista上,这似乎不起作用。在Vista或Windows 7上如何做到这一点?有两种方法。Microsoft API称为IRASrv,并记录在以下位置: 另一种方法是简单地调用msra.exe。使用密码和新手参数(例如msra.exe/saveasfile testfile thepassword)。但是,这会提示用户密码对话框 下面是调用IRASrv接口并生成远程协助连接字符串的示例代码 COSERVERINFO

在Windows XP上,有一种创建远程协助票证的已知方法


但在Vista上,这似乎不起作用。在Vista或Windows 7上如何做到这一点?

有两种方法。Microsoft API称为IRASrv,并记录在以下位置:

另一种方法是简单地调用msra.exe。使用密码和新手参数(例如msra.exe/saveasfile testfile thepassword)。但是,这会提示用户密码对话框

下面是调用IRASrv接口并生成远程协助连接字符串的示例代码

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)
COSERVERINFO si;::零内存(&si,sizeof(si));
多元齐齐;::零内存(&qi,sizeof(qi));
HRESULT hr=S_正常;
BSTR bstrUserName=SysAllocString(L“jon”);
BSTR bstrDomainName=SysAllocString(L“”);
BSTR bstrPasswordStr=SysAllocString(L“testpass”);
//获取用户输入的安全信息
_bstr_t bstrUser(bstrUserName);
_bstr_t bstrDomain(bstrDomainName);
_bstr_t bstrPassword(bstrPasswordStr);
//设置身份验证
SEC_WINNT_AUTH_IDENTITY_W AuthIdentity={
(未签名短*)bstrUserName,
bstrUser.length(),
(无符号短*)bstrDomainName,
bstrDomain.length(),
(无符号短*)bstrPasswordStr,
bstrPassword.length(),
SEC_WINNT_AUTH_IDENTITY_UNICODE
};
COAUTHINFO AuthInfo={
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_默认值,
无效的
RPC_C_AUTHN_LEVEL_PKT_PRIVACY,//使用的身份验证级别
RPC_C_IMP_LEVEL_模拟,
(联合授权标识*)和授权标识,
EOAC_无
};
si.pAuthInfo=&AuthInfo;
si.pwszName=bstrMachineName;
qi.pIID=&(uuuuidof(RAServerLib::IRASrv));
hr=::CoCreateInstanceEx(
__uuidof(RAServerLib::RASrv),NULL,CLSCTX_远程_服务器,
&si,1和qi);
如果(失败(小时))
{
返回人力资源;
}
prasrv先生;
hr=qi.pItf->QueryInterface(uuuuidof(RAServerLib::IRASrv),(void**)和prasrv);
如果(失败(小时))
{
返回人力资源;
}
LPWSTR pstr=NULL;
hr=prasrv->原始用户信息(&pstr);
如果(失败(小时))
{
返回人力资源;
}
pstr包含远程协助连接字符串(类型2)

事实证明有两种方法。Microsoft API称为IRASrv,并记录在以下位置:

另一种方法是简单地调用msra.exe。使用密码和新手参数(例如msra.exe/saveasfile testfile thepassword)。但是,这会提示用户密码对话框

下面是调用IRASrv接口并生成远程协助连接字符串的示例代码

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)
COSERVERINFO si;::零内存(&si,sizeof(si));
多元齐齐;::零内存(&qi,sizeof(qi));
HRESULT hr=S_正常;
BSTR bstrUserName=SysAllocString(L“jon”);
BSTR bstrDomainName=SysAllocString(L“”);
BSTR bstrPasswordStr=SysAllocString(L“testpass”);
//获取用户输入的安全信息
_bstr_t bstrUser(bstrUserName);
_bstr_t bstrDomain(bstrDomainName);
_bstr_t bstrPassword(bstrPasswordStr);
//设置身份验证
SEC_WINNT_AUTH_IDENTITY_W AuthIdentity={
(未签名短*)bstrUserName,
bstrUser.length(),
(无符号短*)bstrDomainName,
bstrDomain.length(),
(无符号短*)bstrPasswordStr,
bstrPassword.length(),
SEC_WINNT_AUTH_IDENTITY_UNICODE
};
COAUTHINFO AuthInfo={
RPC_C_AUTHN_WINNT,
RPC_C_AUTHZ_默认值,
无效的
RPC_C_AUTHN_LEVEL_PKT_PRIVACY,//使用的身份验证级别
RPC_C_IMP_LEVEL_模拟,
(联合授权标识*)和授权标识,
EOAC_无
};
si.pAuthInfo=&AuthInfo;
si.pwszName=bstrMachineName;
qi.pIID=&(uuuuidof(RAServerLib::IRASrv));
hr=::CoCreateInstanceEx(
__uuidof(RAServerLib::RASrv),NULL,CLSCTX_远程_服务器,
&si,1和qi);
如果(失败(小时))
{
返回人力资源;
}
prasrv先生;
hr=qi.pItf->QueryInterface(uuuuidof(RAServerLib::IRASrv),(void**)和prasrv);
如果(失败(小时))
{
返回人力资源;
}
LPWSTR pstr=NULL;
hr=prasrv->原始用户信息(&pstr);
如果(失败(小时))
{
返回人力资源;
}
pstr包含远程协助连接字符串(类型2)

您有关于如何使用“连接字符串2”启动远程连接的参考资料吗?您发布到MSDN的链接有很好的信息,但并不简单。通过查看我为此所做的代码,我提取了ID和KH,并使用它们生成XP样式的请求字符串。您有任何关于如何使用“连接字符串2”启动远程连接的参考资料吗?您发布到MSDN的链接有很好的信息,但并不简单。请查看我为此编写的代码,我提取了ID和KH,并使用它们生成XP风格的请求字符串。