Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

177 lines
5.8 KiB

#include <stdio.h>
#include <tchar.h>
#define INITGUID // must be before iadmw.h
#include <iadmw.h> // Interface header
// for adsi objects
#include <Iads.h>
#include <Adshlp.h>
// for the IID_IISWebService object
#include "iiisext.h"
#include "iisext_i.c"
#define WEBSVCEXT_RESTRICTION_LIST_ADSI_LOCATION L"IIS://LOCALHOST/W3SVC"
HRESULT AddWebSvcExtention(LPWSTR lpwszFileName,VARIANT_BOOL bEnabled,LPWSTR lpwszGroupID,VARIANT_BOOL bDeletableThruUI,LPWSTR lpwszGroupDescription);
HRESULT RemoveWebSvcExtention(LPWSTR lpwszFileName);
HRESULT AddApplicationDependencyUponGroup(LPWSTR lpwszAppName,LPWSTR lpwszGroupID);
HRESULT RemoveApplicationDependencyUponGroup(LPWSTR lpwszAppName,LPWSTR lpwszGroupID);
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
BOOL bComInitialized = SUCCEEDED( ::CoInitialize( NULL ) );
// Add MyFile.dll to the restrictionlist, make sure it's enabled,
// and that the user is able to remove the entry thru the UI if they wanted to
AddWebSvcExtention(L"c:\\windows\\system32\\inetsrv\\MyFile.dll",VARIANT_TRUE,L"MyGroup",VARIANT_TRUE,L"My Description");
// The Commerce Server group would make this entry, to say that
// They're app is dependent upon MyGroup (like dependent upon ASP or soemthing)
//
// This way, if the user installed disabled all of the extensions
// and then discovered "Commerce Server" wasn't working right, they could
// just go to the iis ui and enable all extensions that are used by "Commerce Server" --
// so that "Commerce Server" would work.
AddApplicationDependencyUponGroup(L"Commerce Server",L"MyGroup");
AddApplicationDependencyUponGroup(L"Commerce Server",L"ASP60");
AddApplicationDependencyUponGroup(L"Commerce Server",L"INDEX2002");
//RemoveWebSvcExtention(L"c:\\windows\\system32\\inetsrv\\MyFile.dll");
//RemoveApplicationDependencyUponGroup(L"Commerce Server",L"MyGroup");
//RemoveApplicationDependencyUponGroup(L"Commerce Server",L"ASP60");
//RemoveApplicationDependencyUponGroup(L"Commerce Server",L"INDEX2002");
if ( bComInitialized )
{
::CoUninitialize();
}
return 0;
}
/*
IID_IISWebService has:
o.EnableApplication(“myapp”);
o.RemoveApplication(“myapp”);
o.ListApplications(foo); // must declare foo first – returned as a VB array
o.AddDependency(“myapp”, “mygroup”);
o.RemoveDependency(“myapp”, “mygroup”);
o.EnableWebServiceExtension(“mygroup”);
o.DisableWebServiceExtension(“mygroup”);
o.ListWebServiceExtensions(foo); // see foo note above
o.EnableExtensionFile(“myfile”);
o.DisableExtensionFile(“myfile”);
o.AddExtensionFile(“myfile”, boolEnabled, “mygroup”, boolCanDelete, “my description sucks”); // boolEnabled = t/f, boolCanDelete = t/f
o.DeleteExtensionFileRecord(“myfile”);
o.ListExtensionFiles(foo); // see foo note above
*/
HRESULT AddWebSvcExtention(LPWSTR lpwszFileName,VARIANT_BOOL bEnabled,LPWSTR lpwszGroupID,VARIANT_BOOL bDeletableThruUI,LPWSTR lpwszGroupDescription)
{
HRESULT hrRet = S_FALSE;
WCHAR* wszRootWeb6 = WEBSVCEXT_RESTRICTION_LIST_ADSI_LOCATION;
IISWebService * pWeb = NULL;
HRESULT hr = ADsGetObject(wszRootWeb6, IID_IISWebService, (void**)&pWeb);
if (SUCCEEDED(hr) && NULL != pWeb)
{
VARIANT var1,var2;
VariantInit(&var1);
VariantInit(&var2);
var1.vt = VT_BOOL;
var1.boolVal = bEnabled;
var2.vt = VT_BOOL;
var2.boolVal = bDeletableThruUI;
hr = pWeb->AddExtensionFile(lpwszFileName,var1,lpwszGroupID,var2,lpwszGroupDescription);
if (SUCCEEDED(hr))
{
hrRet = S_OK;
}
else
{
OutputDebugString(_T("failed,probably already exists\r\n"));
}
VariantClear(&var1);
VariantClear(&var2);
pWeb->Release();
}
return hrRet;
}
HRESULT RemoveWebSvcExtention(LPWSTR lpwszFileName)
{
HRESULT hrRet = S_FALSE;
WCHAR* wszRootWeb6 = WEBSVCEXT_RESTRICTION_LIST_ADSI_LOCATION;
IISWebService * pWeb = NULL;
HRESULT hr = ADsGetObject(wszRootWeb6, IID_IISWebService, (void**)&pWeb);
if (SUCCEEDED(hr) && NULL != pWeb)
{
hr = pWeb->DeleteExtensionFileRecord(lpwszFileName);
if (SUCCEEDED(hr))
{
hrRet = S_OK;
}
else
{
OutputDebugString(_T("failed,probably already gone\r\n"));
}
pWeb->Release();
}
return hrRet;
}
HRESULT AddApplicationDependencyUponGroup(LPWSTR lpwszAppName,LPWSTR lpwszGroupID)
{
HRESULT hrRet = S_FALSE;
WCHAR* wszRootWeb6 = WEBSVCEXT_RESTRICTION_LIST_ADSI_LOCATION;
IISWebService * pWeb = NULL;
HRESULT hr = ADsGetObject(wszRootWeb6, IID_IISWebService, (void**)&pWeb);
if (SUCCEEDED(hr) && NULL != pWeb)
{
hr = pWeb->AddDependency(lpwszAppName,lpwszGroupID);
if (SUCCEEDED(hr))
{
hrRet = S_OK;
}
else
{
OutputDebugString(_T("failed,probably already exists\r\n"));
}
pWeb->Release();
}
return hrRet;
}
HRESULT RemoveApplicationDependencyUponGroup(LPWSTR lpwszAppName,LPWSTR lpwszGroupID)
{
HRESULT hrRet = S_FALSE;
WCHAR* wszRootWeb6 = WEBSVCEXT_RESTRICTION_LIST_ADSI_LOCATION;
IISWebService * pWeb = NULL;
HRESULT hr = ADsGetObject(wszRootWeb6, IID_IISWebService, (void**)&pWeb);
if (SUCCEEDED(hr) && NULL != pWeb)
{
hr = pWeb->RemoveDependency(lpwszAppName,lpwszGroupID);
if (SUCCEEDED(hr))
{
hrRet = S_OK;
}
else
{
OutputDebugString(_T("failed,probably already gone\r\n"));
}
pWeb->Release();
}
return hrRet;
}