2016-12-26 57 views
0

我需要設置Allow remote connections to this computer遠程連接到此計算機,所以我想知道如果我可以用WinAPI的啓用它。允許使用WinAPI的

enter image description here

有誰知道這是否可以與任何函數來完成?

+0

這是一個系統管理員任務。用組策略來做。 –

+0

我知道,但我想知道如果我可以通過使用Windows API來做到這一點。 –

回答

1

爲此,您需要設置下一個註冊表項:

HKLM\System\CurrentControlSet\Control\Terminal Server\fDenyTSConnections = 0 
HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\UserAuthentication = (IsDlgButtonChecked() == BST_CHECKED) 
HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\SecurityLayer = 0 or 1 or 2 

。如果不選擇單選按鈕,你需要設定只

HKLM\System\CurrentControlSet\Control\Terminal Server\fDenyTSConnections = 1 

還需要通過下面的代碼使"@FirewallAPI.dll,-28752"防火牆組:

HRESULT EnableFirewallRule(PCWSTR cgroup, VARIANT_BOOL enable) 
{ 
    if (BSTR group = SysAllocString(cgroup)) 
    { 
     INetFwPolicy2* pNetFwPolicy2; 

     HRESULT hr = CoCreateInstance(__uuidof(NetFwPolicy2), 0, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pNetFwPolicy2)); 

     if (!FAILED(hr)) 
     { 
      hr = pNetFwPolicy2->EnableRuleGroup(NET_FW_PROFILE2_ALL, group, enable); 

      pNetFwPolicy2->Release(); 
     } 
     SysFreeString(group); 
     return hr; 
    } 
    else return E_OUTOFMEMORY; 
} 

EnableFirewallRule(L"@FirewallAPI.dll,-28752", VARIANT_TRUE); 

是的,這不是正確的記錄。但是可以找到關於此的一些信息。

是單選按鈕(允許這個計算機遠程連接)選自僅依賴fDenyTSConnections(0或1(= 0)!) - 可以通過在註冊表編輯器變更值測試,並重新打開System Properties/Remote對話框

在MSND一些證據 - Using Remote Desktop

0爲fDenyTSConnections註冊表值意味着 遠程桌面系統上啓用,而1值意味着值 遠程桌面被禁用。如果您稍後決定要在服務器核心安裝上禁用 遠程桌面,請在命令提示符處鍵入cscript %windir%\ system32 \ scregedit.wsf/ar 1。

UserAuthentication - [0或1]控制網絡級身份驗證複選框(1選中,0 - 未選中)(同樣可以在註冊表編輯器變更值及重新打開System Properties/Remote對話 - 或選中/取消選中此此框並查看註冊表編輯器)

在屬性窗格中,單擊框到 UserAuthentication設置和1型的,要求網絡級身份驗證的權利,如下圖所示。

SecurityLayer - [0或1或2] - 看Table 6-1 The SecurityLayer Setting Values

和最後防火牆(這是從遠景開始)

在屬性窗格,C型:\ WINDOWS \ SYSTEM32 \的netsh advfirewall的 -firewall設置規則組= 「遠程桌面」 新啓用= YES

因此,我們需要啓用規則組= 「遠程桌面」

現在看這個technet.microsoft.comlink

例如,要啓用遠程桌面,使用以下命令: <Group>@FirewallAPI.dll,-28752</Group>

如何Enabling a Group存在MSDN上的示例。我的代碼snipet基於此

+0

我認爲'if(BSTR group = SysAllocString())'應該是'if(BSTR group = SysAllocString(group))'而不是。 – UltimaWeapon

+0

@UltimaWeapon - 是的,當然。我的錯誤,當複製粘貼(初始是'BSTR組= SysAllocString(L「@ FirewallAPI.dll,-28752」)')。我修復了代碼。謝謝 – RbMm

+0

這看起來像不透明的hackery,依賴於實現相關的細節。 –