2016-12-26 6 views
0

Allow remote connections to this computerをオンにする必要があります。そのため、WinAPIを使用して有効にすることができますか。WinAPIを使用してこのコンピュータにリモート接続を許可する

enter image description here

これは任意の関数で行うことができれば誰でも知っていますか?このため

+0

これはsysadminタスクです。グループポリシーで実行します。 –

+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)!) - あなたはregeditで値を変更することによってそれをテストし、再度開くことができSystem Properties/Remoteダイアログ

MSND上のいくつかの証拠 - Using Remote Desktop

レジストリ値が1の値が01ことを意味する リモートデスクトップは、システムで有効になっていることを意味するfDenyTSConnections 0の値リモートデスクトップは無効です。後でServer Coreインストールで リモートデスクトップを無効にする場合は、コマンドプロンプトでcscript %windir%\ system32 \ scregedit.wsf/ar 1と​​入力します。

UserAuthentication - [0または1]制御ネットワークレベル認証チェックボックス(1が0、チェックする - 未チェック)(再び、あなたはregeditで値を変更することができ、System Properties/Remoteダイアログを再度開く - またはチェック/これは、このボックスのチェックを外しますそしてregeditで表示)[プロパティ]ペインで

、ここに示すように、ネットワークレベル認証を必要とする ユーザ認証設定とタイプ1の右側にあるボックスをクリックしてください。

SecurityLayer - [0又は1又は2] - 、プロパティペインで

(これは眺めから始める場合)Table 6-1 The SecurityLayer Setting Values

およびファイアウォールの最後を見てタイプC :\ Windows \ system32 \ netsh advfirewall -firewall設定ルールグループ= "リモートデスクトップ"新しい有効=はい

Enabling a Groupでどのように <Group>@FirewallAPI.dll,-28752</Group>

:私たちは今、次を使用し、リモートデスクトップを有効にするために、例えばこのtechnet.microsoft.comlink

を見て、ルール・グループ= "リモートデスクトップ"

を有効にする必要がありますMSDNに存在する例です。私のコードスニペットはこれをベースにしています

+0

私は 'if(BSTR group = SysAllocString(group))'の代わりに 'if(BSTR group = SysAllocString(group))'を使うべきだと思います。 – UltimaWeapon

+0

@UltimaWeapon - はい、もちろんです。私のエラーは、コピー貼り付け時(初期は 'BSTR group = SysAllocString(L" @ FirewallAPI.dll、-28752 "))でした。私はコードを修正する。ありがとうございます – RbMm

+0

これは、実装に依存する詳細に依存する不透明なハッカーのように見えます。 –

関連する問題