Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / web / IIS

Create IIS Virtual Directory

3.06/5 (7 votes)
22 Dec 2006CDDL1 min read 1   814  
This is a command line program that will enable users to create a Virtual Directory on a local host.

Create Virtual Directory

Create Virtual Directory

Invalid Parameters

Invalid Parameters

IIS Entry

Entry In IIS

Introduction

As per the name, it's easy to guess what this project is all about, creating a virtual directory in the default web site (80). The program uses the IIS Administration SDK, which has the Active Directory Service Interfaces (ADSI) that helps VC++ to access the required functions and interfaces.

Background

I started looking on the net for similar programs that uses ADSI with VC++, but was not able to find one, so thought of creating one.

Using the code

To access the ADSI functions, we need to have the following header files.

// The basic header files used
iads.h
adshlp.h
iiisext.h
iisext_i.c
// Constant used to access the default port 80 
// We take IIS://localhost/w3svc/1/Root
// as the path to access the default web site 
const LPWSTR adsPATH = L"IIS://localhost/w3svc/1/Root"; 
IDispatch *pDisp = NULL; //Idispatch interface object
IADs* iAds = NULL; //Active Directory Interface 
IADsContainer* iContainer = NULL; //Active Directory Container Interface 
IISApp *pApp = NULL; //Active Directory IIS Application interface 

Access the ADSI object

//Get Object of  Active Drectory Container ADsGetObject(adsPATH, 
IID_IADsContainer,(void **)&iContainer);

Creating a virtual directory

hr = iContainer->Create(L"IIsWebVirtualDir", cAppName,  &pDisp);

Creating the application with the use of QueryInterface

hr = iAds->QueryInterface( IID_IISApp, (void **)&pApp  );

Accessing the virtual directory property using the iAds interface

hr = iAds->Put(L"AccessRead",CComVariant(VARIANT_TRUE));    
hr = iAds->Put(L"AccessWrite",CComVariant(VARIANT_TRUE));    
hr = iAds->Put(L"AccessScript",CComVariant(VARIANT_TRUE));    
hr = iAds->Put(L"AppIsolated",CComVariant(1));    
hr = iAds->Put(L"EnableDirBrowsing",CComVariant(VARIANT_TRUE));    
hr = iAds->Put(L"AppFriendlyName",CComVariant(cAppName));
hr = iAds->Put(L"Path",CComVariant(clPath)); //Virtual Dir Physicial Path    

Update the changes to the ASDI objects

hr = iAds->SetInfo();
//Save Virtual Dir Application Information

Linking issues

You might end up in getting a link error. To solve this,s the following libraries need to be included:

Activeds.lib 
Adsiid.lib

The currently supported languages are: C++.

Points of interest

While trying out lots of options, I had to interpret .NET code and transform it in to VC++, and one thing I found is whatever the language is, you just need a vision to make it work.

License

This article, along with any associated source code and files, is licensed under The Common Development and Distribution License (CDDL)