cocreateinstanceasadmin failed.
-
i new to c++, need help. I am unable to start Elevation using CoCreateInstanceAsAdmin. why it fails. someone please help. Entire code is given below. ITestCom.dll common.h
#ifndef _COMMON_H
#define _COMMON_H#include <ObjBase.h>
// {6A75080D-86FC-45ca-82B9-0A2E0F482072}
DEFINE_GUID(CLSID_TestCom,
0x6a75080d, 0x86fc, 0x45ca, 0x82, 0xb9, 0xa, 0x2e, 0xf, 0x48, 0x20, 0x72);// {8E6C7162-4D3A-4280-A4FF-33D23F5E1B6F}
DEFINE_GUID(IIDTestCom,
0x8e6c7162, 0x4d3a, 0x4280, 0xa4, 0xff, 0x33, 0xd2, 0x3f, 0x5e, 0x1b, 0x6f);DECLARE_INTERFACE_(IID_IIDTestCom, IUnknown)
{
STDMETHOD (HelloWorld)()PURE;
};
#endifITestCom.cpp
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>#define INITGUID
#include <ObjBase.h>
#include <sddl.h>
#include "common.h"#include <tchar.h>
#include <OleCtl.h>
#include "ITestCom.h"#define MAX_STRING_LENGTH 255
#define GUID_SIZE 128HANDLE g_Module;
HMODULE g_hModule = NULL;
ULONG g_cObjects = 0;
ULONG g_cLocks = 0;BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (DLL_PROCESS_ATTACH == ul_reason_for_call)
g_Module = hModule;
return TRUE;
}STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
HRESULT hr = NOERROR;
CTestComFactory *cf = NULL;if(CLSID\_TestCom == rclsid) { cf = new CTestComFactory(); if (NULL == cf) return E\_OUTOFMEMORY; //Get the required interface hr = cf->QueryInterface(riid,ppv); if(FAILED(hr)) { delete cf; cf=NULL; return hr; } } else hr = CLASS\_E\_CLASSNOTAVAILABLE; return hr;
}
BOOL ServerCanUnloadNow(void)
{
if (0==g_cObjects && 0 == g_cLocks)
return TRUE;
else
return FALSE;
}STDAPI DllCanUnloadNow(void)
{
if(ServerCanUnloadNow()) return S_OK;
else
return S_FALSE;
}STDAPI DllRegisterServer(void)
{
BOOL bOK;
TCHAR szModulePath[MAXPATH +1];
TCHAR szCLSID[GUID_SIZE+1];
TCHAR szAppID[GUID_SIZE+1];
TCHAR szCLSIDKey[MAX_STRING_LENGTH+1];
TCHAR szAppIDKey[MAX_STRING_LENGTH + 1];
TCHAR szLocal[MAX_STRING_LENGTH + 1];
WCHAR wszGUID[GUID_SIZE+1];GetModuleFileName((HMODULE)g\_Module,szModulePath,MAX\_STRING\_LENGTH); //Convert the CLSID to the format //{00000000-0000-0000-0000-00000000} StringFromGUID2(CLSID\_TestCom,wszGUID,sizeof(wszGUID)/sizeof(wchar\_t)); \_tcscpy(szCLSID,wszGUID); StringFromGUID2(IIDTestCom,wszGUID,sizeof(wszGUID)/sizeof(wcha
-
i new to c++, need help. I am unable to start Elevation using CoCreateInstanceAsAdmin. why it fails. someone please help. Entire code is given below. ITestCom.dll common.h
#ifndef _COMMON_H
#define _COMMON_H#include <ObjBase.h>
// {6A75080D-86FC-45ca-82B9-0A2E0F482072}
DEFINE_GUID(CLSID_TestCom,
0x6a75080d, 0x86fc, 0x45ca, 0x82, 0xb9, 0xa, 0x2e, 0xf, 0x48, 0x20, 0x72);// {8E6C7162-4D3A-4280-A4FF-33D23F5E1B6F}
DEFINE_GUID(IIDTestCom,
0x8e6c7162, 0x4d3a, 0x4280, 0xa4, 0xff, 0x33, 0xd2, 0x3f, 0x5e, 0x1b, 0x6f);DECLARE_INTERFACE_(IID_IIDTestCom, IUnknown)
{
STDMETHOD (HelloWorld)()PURE;
};
#endifITestCom.cpp
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>#define INITGUID
#include <ObjBase.h>
#include <sddl.h>
#include "common.h"#include <tchar.h>
#include <OleCtl.h>
#include "ITestCom.h"#define MAX_STRING_LENGTH 255
#define GUID_SIZE 128HANDLE g_Module;
HMODULE g_hModule = NULL;
ULONG g_cObjects = 0;
ULONG g_cLocks = 0;BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (DLL_PROCESS_ATTACH == ul_reason_for_call)
g_Module = hModule;
return TRUE;
}STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
{
HRESULT hr = NOERROR;
CTestComFactory *cf = NULL;if(CLSID\_TestCom == rclsid) { cf = new CTestComFactory(); if (NULL == cf) return E\_OUTOFMEMORY; //Get the required interface hr = cf->QueryInterface(riid,ppv); if(FAILED(hr)) { delete cf; cf=NULL; return hr; } } else hr = CLASS\_E\_CLASSNOTAVAILABLE; return hr;
}
BOOL ServerCanUnloadNow(void)
{
if (0==g_cObjects && 0 == g_cLocks)
return TRUE;
else
return FALSE;
}STDAPI DllCanUnloadNow(void)
{
if(ServerCanUnloadNow()) return S_OK;
else
return S_FALSE;
}STDAPI DllRegisterServer(void)
{
BOOL bOK;
TCHAR szModulePath[MAXPATH +1];
TCHAR szCLSID[GUID_SIZE+1];
TCHAR szAppID[GUID_SIZE+1];
TCHAR szCLSIDKey[MAX_STRING_LENGTH+1];
TCHAR szAppIDKey[MAX_STRING_LENGTH + 1];
TCHAR szLocal[MAX_STRING_LENGTH + 1];
WCHAR wszGUID[GUID_SIZE+1];GetModuleFileName((HMODULE)g\_Module,szModulePath,MAX\_STRING\_LENGTH); //Convert the CLSID to the format //{00000000-0000-0000-0000-00000000} StringFromGUID2(CLSID\_TestCom,wszGUID,sizeof(wszGUID)/sizeof(wchar\_t)); \_tcscpy(szCLSID,wszGUID); StringFromGUID2(IIDTestCom,wszGUID,sizeof(wszGUID)/sizeof(wcha
-
HRESULT hr = CoCreateInstance(CLSID_CExample,NULL,CLSCTX_LOCAL_SERVER,IID_CExample,(void**)&inf); hr value is E_NOINTERFACE No Such Interface Supported. But if CLSCTX_INPROC_SERVER is used then the value of hr is S_OK
Regards, Vishal
modified on Friday, April 8, 2011 1:04 PM