INetSharingConfiguration
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
INetSharingConfiguration インターフェースは、接続共有、ポートマッピング、および Internet Connection Firewall を管理するためのメソッドを提供します。
メソッド 10
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_SharingEnabled メソッドは、この接続で共有が有効になっているかどうかを判定します。
| pbEnabled | VARIANT_BOOL* | out | この接続で共有が有効かどうかを正常終了時に受け取る VARIANT_BOOL 変数へのポインターです。共有が有効な場合、この値は TRUE になります。それ以外の場合は FALSE になります。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
現在インストールされているオペレーティングシステムで接続共有がサポートされているかどうかを確認するには、 INetSharingManager::get_SharingInstalled を使用します。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
get_SharingConnectionType メソッドは、この接続で有効になっている共有の種類を判定します。
| pType | SHARINGCONNECTIONTYPE* | out | この接続がパブリックとして共有されているか、プライベートとして共有されているかを示す SHARINGCONNECTIONTYPE 型の変数へのポインターです。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
現在インストールされているオペレーティングシステムで接続共有がサポートされているかどうかを確認するには、 INetSharingManager::get_SharingInstalled を使用します。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
DisableSharing メソッドは、この接続の共有を無効にします。また、この接続のすべてのマッピングも無効にします。Internet Connection Firewall やブリッジの構成は無効にしません。
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
このメソッドを呼び出すと、次の通知が表示されます。
%programname% がインターネット接続の共有 (ICS) を無効にしようとしています。現在、次の数のユーザーまたはコンピューターがインターネット接続を共有しています: %number%。%programname% が ICS を無効にすることを許可しますか?
共有が有効になっていない接続に対して呼び出した場合も、このメソッドは正常終了します。この場合でも、メソッドは接続上のすべてのマッピングを無効にします。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
EnableSharing メソッドは、この接続の共有を有効にします。
| Type | SHARINGCONNECTIONTYPE | in | この接続をパブリックとして共有するか、プライベートとして共有するかを指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
このメソッドを呼び出すと、次の通知が表示されます。
%programname% がネットワーク接続 %connectionname% でインターネット接続の共有を有効にしようとしています。これにより、ネットワーク上の他のコンピューターが、共有されたパブリック接続を通じてインターネットに接続できるようになります。%programname% がこの接続でインターネット接続の共有を有効にすることを許可しますか?
呼び出し元のアプリケーションがこの接続をパブリックとして共有するよう指定した場合、以前にパブリックとして共有されていた接続は自動的に無効になります。
パブリックとして共有された接続では、Internet Connection Firewall が自動的に有効になります。プライベートとして共有された接続は、既存の設定を保持します。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
get_InternetFirewallEnabled メソッドは、この接続で Internet Connection Firewall が有効になっているかどうかを判定します。
| pbEnabled | VARIANT_BOOL* | out | Internet Connection Firewall が有効かどうかを正常終了時に受け取る VARIANT_BOOL 変数へのポインターです。Internet Connection Firewall が有効な場合、この値は TRUE になります。それ以外の場合は FALSE になります。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は停止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
Windows XP with SP2: 結果として得られるファイアウォールの状態は、2 つのレベルの組み合わせによって決まります。まずグローバルな動作モードを確認し、次に対象となるインターフェースのモードを確認します。全体的な動作状態を判定するには、有効なファイアウォール状態の確認 の手順を使用してください。
DisableInternetFirewall メソッドは、この接続の Internet Connection Firewall を無効にします。
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は停止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
このメソッドを呼び出すと、次の通知が表示されます。
%programname% が Internet Connection Firewall を無効にしようとしています。これにより、コンピューターはインターネット上のセキュリティ上の脅威に対してより脆弱になります。%programname% が Internet Connection Firewall を無効にすることを許可しますか?
この接続で Internet Connection Firewall が有効になっていなかった場合でも、このメソッドは正常終了します。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
Windows XP with SP2: この API を呼び出すと、Windows ファイアウォールがオンになっているかどうかにかかわらず、指定したインターフェースのファイアウォールが無効になります。
EnableInternetFirewall メソッドは、この接続の Internet Connection Firewall を有効にします。
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は停止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
このメソッドを呼び出すと、次の通知が表示されます。
%programname% が、インターネット上のセキュリティ上の脅威からコンピューターまたはネットワークを保護するために Internet Connection Firewall を有効にしようとしています。ただし、古いインターネットゲームの一部が正しく動作しなくなる可能性があります。Internet Connection Firewall を有効にしますか?
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
Windows XP with SP2: この API を呼び出した場合、指定したインターフェースのファイアウォールが有効になるのは、Windows ファイアウォールが有効になっているときのみです。
get_EnumPortMappings メソッドは、IEnumNetSharingPortMapping インターフェースを取得します。このインターフェースを使用して、この接続のポートマッピングを列挙します。
| Flags | SHARINGCONNECTION_ENUM_FLAGS | in | このパラメーターには ICSSC_DEFAULT を指定する必要があります。 |
| ppColl | INetSharingPortMappingCollection** | out | 正常終了時に INetSharingPortMappingCollection インターフェースを指すインターフェースポインターへのポインターです。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
この接続にサービスのポートマッピングを追加します。
| bstrName | LPWSTR | in | このポートマッピングの名前を格納する BSTR 変数へのポインターです。 |
| ucIPProtocol | BYTE | in | ポートマッピングに設定する IP プロトコルを指定します。IP プロトコルは次のいずれかの値です。 NAT_PROTOCOL_TCP NAT_PROTOCOL_UDP |
| usExternalPort | WORD | in | このポートマッピングの外部ポートを指定します。 |
| usInternalPort | WORD | in | このポートマッピングの内部ポートを指定します。 |
| dwOptions | DWORD | in | このパラメーターは予約されており、現時点では使用されません。 |
| bstrTargetNameOrIPAddress | LPWSTR | in | このポートマッピングの対象コンピューターの名前を格納する BSTR 変数へのポインターです。対象の名前または対象の IP アドレスのいずれか一方のみを指定します(両方は指定できません)。 |
| eTargetType | ICS_TARGETTYPE | in | 対象の種類を示します。 |
| ppMapping | INetSharingPortMapping** | out | 正常終了時に、そのポートマッピングの INetSharingPortMapping インターフェースを指すポインターへのポインターです。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
追加された直後、新しいマッピングは無効の状態です。新しいマッピングを有効にするには、 INetSharingPortMapping::Enable を使用します。
追加後、新しい定義は ICS/ICF のユーザーインターフェースのポートマッピング一覧に表示されます。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
RemovePortMapping メソッドは、この接続のマッピング一覧からサービスのポートマッピングを削除します。
| pMapping | INetSharingPortMapping* | in | 削除するポートマッピングの INetSharingPortMapping インターフェースへのポインターです。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードです。
| 戻り値 | 説明 |
|---|---|
| 操作は中止されました。 | |
| 不特定のエラーが発生しました。 | |
| パラメーターのいずれかが無効です。 | |
| 指定されたインターフェースはサポートされていません。 | |
| 指定されたメソッドは実装されていません。 | |
| 必要なメモリを割り当てられませんでした。 | |
| パラメーターとして渡されたポインターが無効です。 | |
| 不明な理由によりメソッドが失敗しました。 |
解説(Remarks)
このメソッドを呼び出すと、ICS/ICF のユーザーインターフェースのマッピング一覧からも、このポートマッピングの名前が削除されます。
特定の接続に対する INetSharingConfiguration インターフェースを取得するには、 INetSharingManager::get_INetSharingConfigurationForINetConnection メソッドを使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_INetSharingConfiguration "{C08956B6-1CD3-11D1-B1C5-00805FC1270E}" #usecom global INetSharingConfiguration IID_INetSharingConfiguration "{}" #comfunc global INetSharingConfiguration_get_SharingEnabled 7 var #comfunc global INetSharingConfiguration_get_SharingConnectionType 8 var #comfunc global INetSharingConfiguration_DisableSharing 9 #comfunc global INetSharingConfiguration_EnableSharing 10 int #comfunc global INetSharingConfiguration_get_InternetFirewallEnabled 11 var #comfunc global INetSharingConfiguration_DisableInternetFirewall 12 #comfunc global INetSharingConfiguration_EnableInternetFirewall 13 #comfunc global INetSharingConfiguration_get_EnumPortMappings 14 int,sptr #comfunc global INetSharingConfiguration_AddPortMapping 15 wstr,int,int,int,int,wstr,int,sptr #comfunc global INetSharingConfiguration_RemovePortMapping 16 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_INetSharingConfiguration "{C08956B6-1CD3-11D1-B1C5-00805FC1270E}" #usecom global INetSharingConfiguration IID_INetSharingConfiguration "{}" #comfunc global INetSharingConfiguration_get_SharingEnabled 7 sptr #comfunc global INetSharingConfiguration_get_SharingConnectionType 8 sptr #comfunc global INetSharingConfiguration_DisableSharing 9 #comfunc global INetSharingConfiguration_EnableSharing 10 int #comfunc global INetSharingConfiguration_get_InternetFirewallEnabled 11 sptr #comfunc global INetSharingConfiguration_DisableInternetFirewall 12 #comfunc global INetSharingConfiguration_EnableInternetFirewall 13 #comfunc global INetSharingConfiguration_get_EnumPortMappings 14 int,sptr #comfunc global INetSharingConfiguration_AddPortMapping 15 wstr,int,int,int,int,wstr,int,sptr #comfunc global INetSharingConfiguration_RemovePortMapping 16 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。