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.
898 lines
23 KiB
898 lines
23 KiB
/*===================================================================
|
|
Microsoft
|
|
|
|
Microsoft Confidential.
|
|
Copyright 1997 Microsoft Corporation. All Rights Reserved.
|
|
|
|
Component: VPTOOL a WAMREG unit testing tool
|
|
|
|
File: module.cpp
|
|
|
|
Owner: leijin
|
|
|
|
Note:
|
|
===================================================================*/
|
|
|
|
#include <stdio.h>
|
|
#include <objbase.h>
|
|
#include <initguid.h>
|
|
#include "admex.h"
|
|
#include "iwamreg.h"
|
|
|
|
//
|
|
//#include "mtxadmin.h"
|
|
|
|
#include "module.h"
|
|
#include "util.h"
|
|
|
|
|
|
#ifdef _WAMREG_LINK_DIRECT
|
|
#include "wmrgexp.h"
|
|
const BOOL fLinkWithWamReg = TRUE;
|
|
#else
|
|
const BOOL fLinkWithWamReg = FALSE;
|
|
#endif
|
|
|
|
HRESULT ModuleInitialize(VOID)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
if (!fLinkWithWamReg)
|
|
{
|
|
// do the call to CoInitialize()
|
|
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT ModuleUnInitialize(VOID)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
|
|
if (!fLinkWithWamReg)
|
|
{
|
|
CoUninitialize();
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
void CreateInPool(CHAR* szPath, BOOL fInProc)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin2* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
DWORD dwAppMode;
|
|
|
|
dwAppMode = (fInProc) ? eAppRunInProc : eAppRunOutProcInDefaultPool;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppCreate2(wszMetabasePath, dwAppMode);
|
|
Timer.Stop();
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("%s : Create %s application on path %s failed, error = %08x.\n",
|
|
(fInProc) ? "CREATEINPROC" : "CREATEINPOOL",
|
|
(fInProc) ? "in-proc" : "out-proc pooled",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("%s: Create %s, pooled application on path %s successfully.\n",
|
|
(fInProc) ? "CREATEINPROC" : "CREATEINPOOL",
|
|
(fInProc) ? "in-proc" : "out-proc pooled",
|
|
szPath);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
|
|
}
|
|
else
|
|
{
|
|
printf("CREATEINPROC: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void CreateOutProc(CHAR* szPath)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppCreate(wszMetabasePath, FALSE);
|
|
Timer.Stop();
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("CREATEOUTPROC: Create out-proc application on path %s failed, error = %08x.\n",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("CREATEOUTPROC: Create an out proc application on path %s successfully.\n",
|
|
szPath);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
}
|
|
else
|
|
{
|
|
printf("CREATEOUTPROC: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void Delete(CHAR* szPath)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppDelete(wszMetabasePath, FALSE);
|
|
Timer.Stop();
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("DELETE: Delete application on path %s failed, error = %08x.\n",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("DELETE: Delete application on path %s successfully.\n",
|
|
szPath);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
}
|
|
else
|
|
{
|
|
printf("DELETE: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void UnLoad(CHAR* szPath)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppUnLoad(wszMetabasePath, FALSE);
|
|
Timer.Stop();
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("UNLOAD: Unload application on path %s failed, error = %08x.\n",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("UNLOAD: Unload application on path %s successfully.\n",
|
|
szPath);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
}
|
|
else
|
|
{
|
|
printf("UNLOAD: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void GetStatus(CHAR* szPath)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
DWORD dwStatus;
|
|
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppGetStatus(wszMetabasePath, &dwStatus);
|
|
Timer.Stop();
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("GETSTATUS: GetStatus of application on path %s failed, error = %08x.\n",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
if (dwStatus == APPSTATUS_NOTDEFINED)
|
|
{
|
|
printf("Application on path %s is not defined. \n", szPath);
|
|
}
|
|
else if (dwStatus == APPSTATUS_STOPPED)
|
|
{
|
|
printf("Application on path %s is stopped. \n", szPath);
|
|
}
|
|
else if (dwStatus == APPSTATUS_RUNNING)
|
|
{
|
|
printf("Application on path %s is running. \n", szPath);
|
|
}
|
|
else
|
|
{
|
|
printf("Application on path %s is in unknown state. \n", szPath);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("GETSTATUS: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void DeleteRecoverable(CHAR* szPath)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
DWORD dwStatus;
|
|
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppDeleteRecoverable(wszMetabasePath, TRUE);
|
|
Timer.Stop();
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("DELETEREC: AppDeleteRecoverable of application on path %s failed, error = %08x.\n",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("DeleteRecoverable call on path %s succeeded.\n", szPath, hr);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
}
|
|
else
|
|
{
|
|
printf("DELETEREC: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
void Recover(CHAR* szPath)
|
|
{
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr = NOERROR;
|
|
IWamAdmin* pIWamAdmin = NULL;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, szPath, -1, wszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IWamAdmin2,
|
|
(void **)&pIWamAdmin);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
DWORD dwStatus;
|
|
|
|
Timer.Start();
|
|
hr = pIWamAdmin->AppRecover(wszMetabasePath, TRUE);
|
|
Timer.Stop();
|
|
|
|
pIWamAdmin->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("Recover: Recover application on path %s failed, error = %08x.\n",
|
|
szPath,
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("Recover call on path %s succeeded.\n", szPath, hr);
|
|
}
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
}
|
|
else
|
|
{
|
|
printf("Recover: Failed to CoCreateInstance of WamAdmin object. error = %8x.\n",
|
|
hr);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void GetSignature()
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
IMSAdminReplication* pIWamRep = NULL;
|
|
DWORD dwRequiredSize = 0;
|
|
DWORD dwBufferSize = sizeof(DWORD);
|
|
DWORD dwBuffer;
|
|
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IMSAdminReplication,
|
|
(void **)&pIWamRep);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
DWORD dwStatus;
|
|
|
|
Timer.Start();
|
|
hr = pIWamRep->GetSignature(dwBufferSize, (BYTE *)&dwBuffer, &dwRequiredSize);
|
|
Timer.Stop();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
|
|
if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER))
|
|
{
|
|
BYTE *pbBuffer = NULL;
|
|
|
|
pbBuffer = new BYTE [dwRequiredSize];
|
|
if (pbBuffer)
|
|
{
|
|
Timer.Reset();
|
|
Timer.Start();
|
|
hr = pIWamRep->GetSignature(dwRequiredSize, pbBuffer, &dwRequiredSize);
|
|
Timer.Stop();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
BYTE *pbTemp = pbBuffer;
|
|
DWORD cTotalSize = 0;
|
|
|
|
for (INT iSignature = 0; cTotalSize < dwRequiredSize; iSignature++)
|
|
{
|
|
printf("Signature buffer[%d]: Signature = %08x\n",
|
|
iSignature,
|
|
*(DWORD*)pbTemp);
|
|
|
|
pbTemp += sizeof(DWORD);
|
|
cTotalSize += sizeof(DWORD);
|
|
}
|
|
|
|
printf("TotalSize = %d, RequiredSize = %d \n",
|
|
cTotalSize,
|
|
dwRequiredSize);
|
|
}
|
|
else
|
|
{
|
|
printf("GetSignature failed, step 2, hr = %s\n",
|
|
hr);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("GetSignature Out of memory.\n");
|
|
}
|
|
}
|
|
|
|
pIWamRep->Release();
|
|
if (FAILED(hr))
|
|
{
|
|
printf("GetSignature failed, hr = %08x\n",
|
|
hr);
|
|
}
|
|
else
|
|
{
|
|
printf("GetSignature succeeded, signature is %08x\n", dwBuffer);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void Serialize()
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
IMSAdminReplication* pIWamRep = NULL;
|
|
BYTE bBufferTemp[4];
|
|
DWORD dwRequiredSize = 0;
|
|
DWORD dwBufferSize = 0;
|
|
BYTE* pbBuffer = NULL;
|
|
CStopWatch Timer;
|
|
|
|
Timer.Reset();
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IMSAdminReplication,
|
|
(void **)&pIWamRep);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
DWORD dwStatus;
|
|
|
|
Timer.Start();
|
|
|
|
hr = pIWamRep->Serialize(dwBufferSize, bBufferTemp, &dwRequiredSize);
|
|
|
|
Timer.Stop();
|
|
Report_Time(Timer.GetElapsedSec());
|
|
|
|
if (hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER))
|
|
{
|
|
pbBuffer = new BYTE [dwRequiredSize];
|
|
if (pbBuffer)
|
|
{
|
|
BYTE *pbTemp = pbBuffer;
|
|
DWORD cTotalBytes = 0;
|
|
DWORD cRecBytes = 0;
|
|
WCHAR *szProgID = NULL;
|
|
WCHAR *szWAMCLSID = NULL;
|
|
WCHAR *szPath = NULL;
|
|
|
|
Timer.Start();
|
|
hr = pIWamRep->Serialize(dwRequiredSize, pbBuffer, &dwRequiredSize);
|
|
|
|
|
|
Timer.Stop();
|
|
Report_Time(Timer.GetElapsedSec());
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
pbTemp = pbBuffer;
|
|
|
|
while (*(DWORD*)pbTemp != 0x0 && SUCCEEDED(hr))
|
|
{
|
|
cRecBytes = *(DWORD*)pbTemp;
|
|
pbTemp += sizeof(DWORD);
|
|
|
|
szWAMCLSID = (WCHAR *)pbTemp;
|
|
pbTemp += uSizeCLSID*sizeof(WCHAR);
|
|
|
|
szPath = (WCHAR *)pbTemp;
|
|
pbTemp += cRecBytes - uSizeCLSID*sizeof(WCHAR) - sizeof(DWORD);
|
|
|
|
printf("Serialize: Path = %S, WAMCLSID = %S, \n",
|
|
szPath,
|
|
szWAMCLSID);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
printf("Serialize failed, step 2, hr = %s\n",
|
|
hr);
|
|
}
|
|
|
|
delete [] pbBuffer;
|
|
pbBuffer = NULL;
|
|
}
|
|
else
|
|
{
|
|
printf("Serialize failed, out of memory.\n");
|
|
}
|
|
|
|
}
|
|
pIWamRep->Release();
|
|
}
|
|
return;
|
|
}
|
|
|
|
void HELPER2(IIISApplicationAdmin ** ppIAdmin, WCHAR * pwszMetabasePath)
|
|
{
|
|
HRESULT hr = NOERROR;
|
|
INT cSize = 0;
|
|
INT cch = 0;
|
|
|
|
cSize = MultiByteToWideChar(0, 0, g_Command.szMetabasePath, -1, pwszMetabasePath, SIZE_STRING_BUFFER);
|
|
if (cSize == 0)
|
|
{
|
|
DWORD err = GetLastError();
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
printf("Error: The Metabase path exceeds 1024 chars.\n");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
hr = CoCreateInstance(CLSID_WamAdmin,
|
|
NULL,
|
|
CLSCTX_SERVER,
|
|
IID_IIISApplicationAdmin,
|
|
(void **)ppIAdmin);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("CoCreateFailed, in HELPER2, hr = %08x\n", hr);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
void CREATE2()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
|
|
hr = pIAdmin->CreateApplication(wszMetabasePath, eAppRunOutProcIsolated, L"TestAppPool", TRUE);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("CreateApplication Failed, in CREATE2, hr = %08x\n", hr);
|
|
}
|
|
pIAdmin->Release();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
|
|
void DELETE2()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
|
|
hr = pIAdmin->DeleteApplication(wszMetabasePath, FALSE);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("DeleteApplication Failed, in DELETE2, hr = %08x\n", hr);
|
|
}
|
|
pIAdmin->Release();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
void CREATEPOOL2()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
|
|
hr = pIAdmin->CreateApplicationPool(wszMetabasePath);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("CreateApplicationPool Failed, in CREATEPOOL2, hr = %08x\n", hr);
|
|
}
|
|
pIAdmin->Release();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
void DELETEPOOL2()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
|
|
hr = pIAdmin->DeleteApplicationPool(wszMetabasePath);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("DeleteApplicationPool Failed, in DELETEPOOL2, hr = %08x\n", hr);
|
|
}
|
|
pIAdmin->Release();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
void ENUMPOOL2()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
BSTR bstr;
|
|
hr = pIAdmin->EnumerateApplicationsInPool(wszMetabasePath, &bstr);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("EnumerateApplicationsInPool Failed, in second call, hr = %08x\n", hr);
|
|
}
|
|
|
|
pIAdmin->Release();
|
|
|
|
const WCHAR * pTestBuf = bstr;
|
|
|
|
while (pTestBuf[0])
|
|
{
|
|
printf("%S\nnext\n", pTestBuf);
|
|
|
|
// move pTestBuf beyond end of this string, including NULL terminator.
|
|
pTestBuf += wcslen(pTestBuf) + 1;
|
|
}
|
|
|
|
SysFreeString(bstr);
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
void RECYCLEPOOL()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
|
|
hr = pIAdmin->RecycleApplicationPool(wszMetabasePath);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("RecycleApplicationPool Failed, in RECYCLEPOOL, hr = %08x\n", hr);
|
|
}
|
|
pIAdmin->Release();
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
void GETMODE()
|
|
{
|
|
CStopWatch Timer;
|
|
IIISApplicationAdmin* pIAdmin = NULL;
|
|
WCHAR wszMetabasePath[SIZE_STRING_BUFFER];
|
|
HRESULT hr;
|
|
Timer.Reset();
|
|
|
|
HELPER2(&pIAdmin, wszMetabasePath);
|
|
|
|
DWORD dwMode = 0;
|
|
|
|
hr = pIAdmin->GetProcessMode(&dwMode);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("GetProcessMode Failed, in GETMODE, hr = %08x\n", hr);
|
|
}
|
|
pIAdmin->Release();
|
|
|
|
printf("Mode is: %08x\n", dwMode);
|
|
|
|
Report_Time(Timer.GetElapsedSec());
|
|
return;
|
|
}
|
|
|
|
#include <iadmw.h>
|
|
|
|
void TestConn()
|
|
{
|
|
HRESULT hr = S_OK;
|
|
IMSAdminBase * pAdminBase = NULL;
|
|
IConnectionPointContainer * pConnPointContainer = NULL;
|
|
IConnectionPoint * pConnPoint = NULL;
|
|
DWORD dwSinkNotifyCookie;
|
|
|
|
hr = CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,
|
|
IID_IMSAdminBase, (void**) &pAdminBase);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("couldn't cocreate\n");
|
|
return;
|
|
}
|
|
|
|
hr = pAdminBase->QueryInterface(IID_IConnectionPointContainer,
|
|
(void**) &pConnPointContainer);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("couldn't QI\n");
|
|
return;
|
|
}
|
|
|
|
hr = pConnPointContainer->FindConnectionPoint(IID_IMSAdminBaseSink,
|
|
&pConnPoint);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("couldn't findconnpoint\n");
|
|
return;
|
|
}
|
|
|
|
hr = pConnPoint->Advise(NULL, &dwSinkNotifyCookie);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("couldn't advise\n");
|
|
return;
|
|
}
|
|
|
|
printf("advised ok\n");
|
|
|
|
return;
|
|
}
|
|
|