Configuring System Plug-ins
Plug-ins provide much of the functionality for a Windows Media server. In addition to the system plug-ins included with Windows Media Services, any number of specialized custom plug-ins can be created for use with the server. Many of the system plug-ins expose an administration interface that you can use to modify and configure the plug-in programmatically. If you create your own plug-in, you can also expose a custom administration interface. For more information about the system plug-ins that expose user interfaces, see Programming System Plug-in Properties. For more information about creating an administration interface for your custom plug-in, see Creating an MMC Property Page. In the following examples, the WMS IP Address Authorization plug-in included with Windows Media Services is configured by using its administration interface.
Note
To use the C++ system plug-in interfaces, the following line must appear in your code exactly as shown, or the interfaces will not be properly defined. When this import statement is used, it is not necessary to include a reference to the file "WMSServer.h."
-
raw_interfaces_only
Visual Basic .NET Example
Imports Microsoft.WindowsMediaServices.Interop
Imports System.Runtime.InteropServices
' Declare variables.
Dim Server As WMSServer
Dim Plugin As IWMSPlugin
Dim IPAdmin As IWMSIPAdmin
Dim Address As String
Dim Mask As String
Dim i As Integer
Try
' Create the WMSServer object.
Server = New WMSServer()
' Retrieve the plug-in to be configured.
Plugin = Server.EventHandlers.Item("WMS IP Address Authorization")
' Retrieve the custom interface of the plug-in.
IPAdmin = Plugin.CustomInterface
' Configure the plug-in to allow all IP addresses
' except those specifically set to be denied.
IPAdmin.AccessListOptions = WMS_IP_ACCESS_OPTIONS.WMS_IP_ACCESS_ALLOW_BY_DEFAULT
' Add an IP to the list of banned addresses.
' Setting the mask in this case bans all IPs
' in the range of 128.117.93.*
IPAdmin.DisallowIP.Add("128.117.93.5", "255.255.255.0")
' Retrieve the information associated
' with each banned address.
For i = 0 To IPAdmin.DisallowIP.Count - 1
Address = IPAdmin.DisallowIP.Item(i).Address
Mask = IPAdmin.DisallowIP.Item(i).Mask
Next
Catch errCom As COMException
' TODO: Handle COM exceptions.
Catch err As Exception
' TODO: Exception handler goes here.
Finally
' TODO: Clean-up code goes here.
End Try
C# Example
using Microsoft.WindowsMediaServices.Interop;
using System.Runtime.InteropServices;
WMSServer Server;
IWMSPlugin Plugin;
IWMSPlugins Plugins;
IWMSIPAdmin IPAdmin;
string Address = "";
string Mask = "";
int i;
try
{
Server = new WMSServerClass();
// Retrieve the plug-in to be configured.
Plugins = Server.EventHandlers;
for (i = 0; i< Plugins.Count; i++)
{
if ("WMS IP Address Authorization" == Plugins[i].Name)
{
Plugin = Plugins[i];
// Retrieve the custom interface of the plug-in.
IPAdmin = (IWMSIPAdmin)Plugin.CustomInterface;
// Configure the plug-in to allow all IP addresses
// except those specifically set to be denied.
IPAdmin.AccessListOptions = WMS_IP_ACCESS_OPTIONS.WMS_IP_ACCESS_ALLOW_BY_DEFAULT;
// Add an IP to the list of banned addresses.
// Setting the mask in this case bans all IPs
// in the range of 128.117.93.*
IPAdmin.DisallowIP.Add("128.117.93.5", "255.255.255.0");
// Retrieve the information associated
// with each banned address.
for (i = 0; i < IPAdmin.DisallowIP.Count; i++)
{
Address = IPAdmin.DisallowIP[i].Address;
Mask = IPAdmin.DisallowIP[i].Mask;
}
break;
}
}
}
catch (COMException comExc)
{
// TODO: Handle COM exceptions.
}
catch (Exception exc)
{
// TODO: Exception handler goes here.
}
finally
{
// TODO: Clean-up code goes here.
}
C++ Example
#include <windows.h>
#include <atlbase.h> // Includes CComBSTR and CComVariant.
// To access system plug-in interfaces, the
// entire type library must be imported as shown.
#import "WMSServerTypeLib.dll" no_namespace named_guids \
raw_interfaces_only
// Declare variables and interfaces.
IWMSServer *pServer;
IWMSPlugins *pPlugins;
IWMSPlugin *pPlugin;
IDispatch *pDispatch;
IWMSIPAdmin *pIPAdmin;
IWMSIPList *pIPList;
IWMSIPEntry *pIPEntry;
HRESULT hr;
CComVariant varIndex;
CComBSTR bstrIP;
CComBSTR bstrMask;
long lCount;
// Initialize the COM library and retrieve a pointer
// to an IWMSServer interface.
hr = CoInitialize(NULL);
hr = CoCreateInstance(CLSID_WMSServer,
NULL,
CLSCTX_ALL,
IID_IWMSServer,
(void **)&pServer);
if (FAILED(hr)) goto EXIT;
// Retrieve a pointer to an IWMSPlugins interface
// containing event handler plug-ins.
hr = pServer->get_EventHandlers(&pPlugins);
if (FAILED(hr)) goto EXIT;
// Retrieve a pointer to an IWMSPlugin interface
// of the plug-in to be configured.
varIndex = "WMS IP Address Authorization";
hr = pPlugins->get_Item(varIndex, &pPlugin);
if (FAILED(hr)) goto EXIT;
// Retrieve a pointer to the custom interface
// of the plug-in.
hr = pPlugin->get_CustomInterface(&pDispatch);
if (FAILED(hr)) goto EXIT;
// Query the specific administration interface
// for the plug-in.
hr = pDispatch->QueryInterface(IID_IWMSIPAdmin,
(void **)&pIPAdmin);
if (FAILED(hr)) goto EXIT;
// Configure the plug-in to allow all IP addresses
// except those specifically set to be denied.
hr = pIPAdmin->put_AccessListOptions(WMS_IP_ACCESS_ALLOW_BY_DEFAULT);
if (FAILED(hr)) goto EXIT;
// Retrieve the list of banned IP addresses.
hr = pIPAdmin->get_DisallowIP(&pIPList);
if (FAILED(hr)) goto EXIT;
// Add an IP to the list of banned addresses.
// Setting the mask in this case bans all IPs
// in the range of 128.117.93.*
bstrIP = "128.117.93.5";
bstrMask = "255.255.255.0";
hr = pIPList->Add(bstrIP, bstrMask, &pIPEntry);
if (FAILED(hr)) goto EXIT;
// Retrieve the total count of banned IPs.
hr = pIPList->get_Count(&lCount);
if (FAILED(hr)) goto EXIT;
// Retrieve the information associated
// with each banned address.
for (x = 0; x < lCount; x++)
{
varIndex = x;
hr = pIPList->get_Item(varIndex, &pIPEntry);
if (FAILED(hr)) goto EXIT;
hr = pIPEntry->get_Address(&bstrIP);
if (FAILED(hr)) goto EXIT;
hr = pIPEntry->get_Mask(&bstrMask);
if (FAILED(hr)) goto EXIT;
// Release the IWMSIPEntry object.
pIPEntry->Release();
}
EXIT:
// TODO: Release temporary COM objects and uninitialize COM.
See Also (General)
See Also (Visual Basic .NET)
IWMSIPAdmin IWMSIPAdmin Object (Visual Basic .NET)
IWMSPlugins IWMSPlugins Object (Visual Basic .NET)
See Also (C#)
IWMSIPAdmin Object (C#)
IWMSPlugins IWMSPlugins Object (C#)
See Also (C++)
IWMSIPAdmin IWMSIPAdmin Interface
IWMSPlugins IWMSPlugins Interface