Iis и его программное администрирование

  • Автор темы Zorn
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Z

Zorn

#1
//В этом коде вроде все хорошо, вот только:#include "StdAfx.h"

INT WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
LockSegment
HRESULT hr=CoInitializeEx(NULL,COINIT_MULTITHREADED);
if (FAILED(hr))
{
MessageBoxW(NULL,L"COM Initialization Error",
L"Could not initialize COM!",MB_OK | MB_ICONSTOP);
}
IMSAdminBase* pAdminBase=NULL;
LPCLASSFACTORY pcf=NULL;
COSERVERINFO co;
OLECHAR mn[]=L"Zorn";
ZeroMemory(&co,sizeof(COSERVERINFO));
co.pwszName=mn;
hr=CoGetClassObject(CLSID_MSAdminBase,CLSCTX_ALL,&co,IID_IClassFactory,(LPVOID*)&pcf);//CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_SERVER, IID_IMSAdminBase,(LPVOID*)&pAdminBase);
if (FAILED(hr))
{
MessageBoxW(NULL,L"The interface is not implemented.",
L"Error: CoGetClassObject",MB_OK | MB_ICONSTOP);
}
hr=pcf->CreateInstance(NULL,IID_IMSAdminBase,(LPVOID*)&pAdminBase);
if (FAILED(hr))
{
MessageBoxW(NULL,L"The interface is not implemented.",
L"Error: IClassFactory->CreateInstance",MB_OK | MB_ICONSTOP);
}
METADATA_HANDLE mh=NULL;
hr=pAdminBase->OpenKey(METADATA_MASTER_ROOT_HANDLE,L"/LM/W3SVC",METADATA_PERMISSION_READ,0,&mh);
if (FAILED(hr))
{
MessageBoxW(NULL,L"Can't open W3SVC root",L"OpenKey",MB_OK | MB_ICONSTOP);
}
DWORD keyInd=0;
WCHAR pszKeyName[128];
hr=pAdminBase->EnumKeys(mh,L"",pszKeyName,keyInd);


//Только после этого место память в сегменте стека полностью заполняется
//нулями. Как это может быть и как этого избежать?


if (!FAILED(hr)) while (HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS)!=hr)
{
MessageBoxW(NULL,pszKeyName,L"Server name",MB_OK | MB_ICONINFORMATION);
//pAdminBase->OpenKey(METADATA_MASTER_ROOT_HANDLE,L"/lm/w3svc",METADATA_PERMISSION_READ,5000,&mh);
hr=pAdminBase->EnumKeys(mh,L"",pszKeyName,++keyInd);
}
else
{
if (hr!=HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS))
MessageBoxW(NULL,L"Could not enumerate servers",L"Error",MB_OK | MB_ICONSTOP);
}
if (mh) pAdminBase->CloseKey(mh);
if (pAdminBase) pAdminBase->Release();
if (pcf) pcf->Release();
CoUninitialize();
return ERROR_SUCCESS;
}
 
Статус
Закрыто для дальнейших ответов.