hackedteam/fuzzer-windows

View on GitHub
ie_sandbox/HelloWorld/broker.cpp

Summary

Maintainability
Test Coverage
#include "stdafx.h"
#include "resource.h"
#include "HelloWorld_i.h"
#include "dllmain.h"
#include <Windows.h>
#include <iepmapi.h>
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include "broker.h"
#include "log.h"

extern unsigned long ESP_RESTORE;


// CoCreateUser function in ieframe.dll.
// We use it to get the IEUserBroker interface
int (*coCreateUserBroker)(IE_USER_BROKER_OBJ*);

/************************************/
/**** GUID FOR INTERFACES WE NEED ***/
/************************************/

struct _GUID CLSID_CProtectedModeAPINoFrameAffinity = {0x8C537469, 0x1EA9, 0x4C85, {0x99, 0x47, 0x7e, 0x41, 0x85, 0, 0xcd, 0xd4}};
struct _GUID IID_ProtectedModeAPI =                   {0x3853EAB3, 0xadb3, 0x4be8, {0x9c, 0x96, 0xc8, 0x83, 0xb9, 0x8e, 0x76, 0xad}};
struct _GUID CLSID_CShdocvwBroker =                   {0x9C7A1728, 0xb694, 0x427a, {0x94, 0xa2, 0xa1, 0xb2, 0xc6, 0xf, 0x3, 0x60}};
struct _GUID CLSID_CShdocvwBrokerNoFrame =            {0x20CCEF1E, 0x185,  0x41A5, {0xa9, 0x33, 0x50, 0x9c, 0x43, 0xb5, 0x4f, 0x98}};
struct _GUID GUID_Get_CshdocvwBroker =                {0x151B1F5F, 0x25cd, 0x45f9, {0xad, 0xbc, 0xb8, 0x5a, 0x66, 0xbf, 0xb6, 0x8b}};
struct _GUID CLSID_IERecoveryStore =                  {0x10BCEB99, 0xFAAC, 0x4080, {0xb2, 0xfa, 0xd0, 0x7c, 0xd6, 0x71, 0xee, 0xf2}};
struct _GUID GUID_Get_IERecoveryStore =               {0xCBEBAD9C, 0x452A, 0x43cb, {0x80, 0x37, 0x44, 0x1e, 0xa7, 0x74, 0x62, 0x3e}}; 
struct _GUID CLSID_IERegHelperBroker =                {0x41DC24D8, 0x6B81, 0x41C4, {0x83, 0x2c, 0xfe, 0x17, 0x2c, 0xb3, 0xa5, 0x82}};
struct _GUID CLSID_IERegHelperBrokerCleanup =         {0xC40B45C3, 0x1518, 0x46FB, {0xa0, 0xf0, 0xc,  0x5,  0x61, 0x74, 0xd5, 0x55}};
struct _GUID CLSID_IEAxInstallBrokerBroker =          {0xC6BAE7E5, 0xC740, 0x4996, {0xb9, 0xc9, 0xad, 0x4d, 0x3a, 0x68, 0x98, 0xd1}};
struct _GUID CLSID_IEBrokerAttach =                   {0x7673B35E, 0x907A, 0x449D, {0xa4, 0x9f, 0xe5, 0xce, 0x47, 0xf0, 0xb0, 0xb2}};
struct _GUID CLSID_CIeAxiInstaller =                  {0xBDB57FF2, 0x79B9, 0x4205, {0x94, 0x47, 0xf5, 0xfe, 0x85, 0xf3, 0x73, 0x12}};
struct _GUID CLSID_CSettingsBroker =                  {0xC6CC0D21, 0x895d, 0x49cc, {0x98, 0xf1, 0xd2, 0x8, 0xcd, 0x71, 0xe0, 0x47}};
struct _GUID GUID_Get_CSettingsBroker =               {0xEA77E0BC, 0x3ce7, 0x4cc1, {0x92, 0x8f, 0x6f, 0x50, 0xa0, 0xce, 0x54, 0x87}};
struct _GUID CLSID_FeedsLoriBroker =                  {0xA7C922A0, 0xA197, 0x4AE4, {0x8F, 0xCD, 0x22, 0x36, 0xBB, 0x4C, 0xF5, 0x15}};
struct _GUID GUID_FeedsLoriBroker2 =                  {0x7AB1E58, 0x91A0, 0x450F, {0xb4, 0xa5, 0xa4, 0xc7, 0x75, 0xe6, 0x73, 0x59}};
struct _GUID CLSID_FeedsArbiterLoriBroker =           {0x34e6abfe, 0xe9f4, 0x4ddf, {0x89, 0x5a, 0x73, 0x50, 0xe1, 0x98, 0xf2, 0x6e}};
struct _GUID GUID_FeedsArbiterLoriBroker2 =           {0xedb9ef13, 0x45c, 0x4c0a,  {0x80, 0x8e, 0x32, 0x94, 0xc5, 0x97, 0x3, 0xb4}};  
struct _GUID IID_ShellWindow =                        {0x85CB6900, 0x4D95, 0x11CF, {0x96, 0xc, 0, 0x80, 0xc7, 0xf4, 0xee, 0x85}};

struct _GUID IID_ItabWindow = {0x54862BD, 0x0E602, 0x4DBC, {0x8f, 0x91, 0xc0, 0x6, 0x45, 0x1a, 0x82, 2}};

IE_USER_BROKER_OBJ *iebroker_iface = NULL;
STD_IDENTITY_OBJ *identity_iface = NULL;
PROTECTED_MODE_OBJ *protected_iface = NULL;
SH_BROKER_OBJ *shbroker_iface = NULL;
IERECOVERY_STORE_OBJ *recoveryStore_iface = NULL;
SETTINGSSTORE_OBJ *settingsStore_iface = NULL;
IEREGHELPER_BROKER_OBJ *ieRegHelperBroker_iface = NULL;
IEREGHELPER_CLEANUP_OBJ *ieRegHelperCleanup_iface = NULL;
IEBROKERATTACH_OBJ* ieBrokerAttach_iface = NULL;
IEAXINSTALLBROKER_OBJ *ieAxInstallBroker_iface = NULL;
FEEDSARBITERLORI_BROKER_OBJ *FeedsArbiterLoriBroker_iface = NULL;
FEEDSLORI_BROKER_OBJ *FeedsLoriBroker_iface = NULL;
SHELLWINDOW_OBJ *ShellWindow_iface = NULL;

#define PROLOGUE {\
        __asm push ebp\
        __asm mov ebp, esp\
        }


#define EPILOGUE {\
        __asm mov esp, ebp \
        __asm pop ebp \
        __asm ret\
        }




/********* IEUserBroker Interface *******/
/****************************************/

IE_USER_BROKER_OBJ* getUserBrokerInterface() {    
    HINSTANCE dllHandle = NULL;
    IE_USER_BROKER_OBJ *broker_ptr = NULL;

    writeLog("[*] Looking for iertutil.dll\r\n");

    dllHandle = LoadLibrary((LPCWSTR)L"iertutil.dll");
    // Get an handle to the iertutil.dll library
    if(dllHandle != NULL)
        writeLog("[+] iertutil.dll correctly imported!\r\n");
    else {
        writeLog("[-] Unable to find iertutil.dll... aborting!\r\n");
        return NULL;
    }

    writeLog("[*] Looking for CoCreateUserBroker method\r\n");
    // Get the entry point for the CoCreateUserBroker method (exported as #58 entry)
    int (*coCreateUserBroker)(void *) =  (int (*)(void *)) GetProcAddress(dllHandle, (LPCSTR) COCREATEUSERBROKER_ENTRY);

    if(coCreateUserBroker != NULL) 
        writeLog("[+] Method CoCreateUserBroker correctly found!\r\n");
    else {
        writeLog("[-] Unable to find CoCreateUserBroker method.... aborting!\r\n");
        return NULL;
    }

    // Return the IEUserBroker object
    coCreateUserBroker(&broker_ptr);
    return broker_ptr;
}



/*********************************************/
/* Get an interface from the broker **********/
/*********************************************/

// For some reason the calling convention for the broker functions is different in visual studio.
// For these reason we use naked function writing prologue and epilogue by hand to be sure that the 
// stack pointer will be correct before to return.



/****** ProtectedModeAPI Interface ***********/
/*********************************************/

PROTECTED_MODE_OBJ* getProtectedModeAPIInterface() { 

    if(protected_iface == NULL) {
        iebroker_iface = getUserBrokerInterface();

        if(iebroker_iface == NULL) {
            writeLog("[-] ProtectedModeAPI: Unable to retrieve IEUserBroker object... aborting\r\n");
            return NULL;
        }

        writeLog("[*] ProtectedModeAPI: Initializing broker object\r\n");
        IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
        writeLog("[*] ProtectedModeAPI: Getting StdIdentity object\r\n");
        IEUserBroker_CreateKnownObject(iebroker_iface, &CLSID_CProtectedModeAPINoFrameAffinity, (GUID *)&IID_IUnknown, &identity_iface);

        if(identity_iface == NULL) {
            writeLog("[-] ProtectedModeAPI: Unable to retrieve StdIdentity object... aborting\r\n");
            return NULL;
        }

        writeLog("[+] ProtectedModeAPI: StdIdentity object correctly retrieved\r\n");
        writeLog("[*] ProtectedModeAPI: Getting ProtectedModeAPI object\r\n");
        CStdIdentity_QueryInterfaces(identity_iface, &IID_ProtectedModeAPI, (void **)&protected_iface);
    }

    if(protected_iface == NULL) 
        writeLog("[-] ProtectedModeAPI: Unable to retrieve ProtectedModeAPI object... aborting\r\n");
    else
        writeLog("[+] ProtectedModeAPI: ProtectedModeAPI object correctly retrieved\r\n");

    return protected_iface;
}


/******* ShDocvwBroker Interface *****************/
/*************************************************/

SH_BROKER_OBJ* getShBrokerIface() { 

    if(shbroker_iface == NULL) {
        iebroker_iface = getUserBrokerInterface();
        
        if(iebroker_iface == NULL) {
            writeLog("[-] ShDocvwBroker: Unable to retrieve IEUserBroker object... aborting\r\n");
            return NULL;
        }

        writeLog("[*] ShDocvwBroker: Initializing broker object\r\n");
        IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
        writeLog("[*] ShDocvwBroker: Getting StdIdentity object\r\n");
        IEUserBroker_CreateKnownObject(iebroker_iface, &CLSID_CShdocvwBroker, (GUID *)&IID_IUnknown, &identity_iface);
        
        if(identity_iface == NULL) {
            writeLog("[-] ShDocvwBroker: Unable to retrieve StdIdentity object... aborting\r\n");
            return NULL;
        }
        
        writeLog("[+] ShDocvwBroker: StdIdentity object correctly retrieved\r\n");
        writeLog("[*] ShDocvwBroker: Getting ShDocvwBrokerObj object\r\n");
        CStdIdentity_QueryInterfaces(identity_iface, &GUID_Get_CshdocvwBroker, (void **)&shbroker_iface);
    }

    if(shbroker_iface == NULL) 
        writeLog("[-] ShDocvwBroker: Unable to retrieve ShDocvwBroker object... aborting\r\n");
    else
        writeLog("[+] ShDocvwBroker: ShDocvwBroker object correctly retrieved\r\n");

    return shbroker_iface;
}




/******* IERecoveryStore Interface *****************/
/*************************************************/

IERECOVERY_STORE_OBJ* getRecoveryStoreIface() { 

    if(recoveryStore_iface == NULL) {
        iebroker_iface = getUserBrokerInterface();
        
        if(iebroker_iface == NULL) {
            writeLog("[-] IERecoveryStore: Unable to retrieve IEUserBroker object... aborting\r\n");
            return NULL;
        }

        writeLog("[*] IERecoveryStore: Initializing broker object\r\n");
        IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
        writeLog("[*] IERecoveryStore: Getting StdIdentity object\r\n");
        IEUserBroker_CreateKnownObject(iebroker_iface, &CLSID_IERecoveryStore, (GUID *)&IID_IUnknown, &identity_iface);
        
        if(identity_iface == NULL) {
            writeLog("[-] IERecoveryStore: Unable to retrieve StdIdentity object... aborting\r\n");
            return NULL;
        }
        
        writeLog("[+] IERecoveryStore: StdIdentity object correctly retrieved\r\n");
        writeLog("[*] IERecoveryStore: Getting IERecoveryStore object\r\n");
        CStdIdentity_QueryInterfaces(identity_iface, &GUID_Get_IERecoveryStore, (void **)&recoveryStore_iface);
    }

    if(recoveryStore_iface == NULL) 
        writeLog("[-] IERecoveryStore: Unable to retrieve IERecoveryStore object... aborting\r\n");
    else
        writeLog("[+] IERecoveryStore: IERecoveryStore object correctly retrieved\r\n");

    return recoveryStore_iface;
}



/******* SettingsStore Interface *****************/
/*************************************************/
SETTINGSSTORE_OBJ* getSettingsStoreIface() { 
    
    if(settingsStore_iface == NULL) {
        iebroker_iface = getUserBrokerInterface();
        
        if(iebroker_iface == NULL) {
            writeLog("[-] SettingsStore: Unable to retrieve IEUserBroker object... aborting\r\n");
            return NULL;
        }

        writeLog("[*] SettingsStore: Initializing broker object\r\n");
        IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
        writeLog("[*] SettingsStore: Getting StdIdentity object\r\n");
        IEUserBroker_CreateKnownObject(iebroker_iface, &CLSID_CSettingsBroker, (GUID *)&IID_IUnknown, &identity_iface);
        
        if(identity_iface == NULL) {
            writeLog("[-] SettingsStore: Unable to retrieve StdIdentity object... aborting\r\n");
            return NULL;
        }
        
        writeLog("[+] SettingsStore: StdIdentity object correctly retrieved\r\n");
        writeLog("[*] SettingsStore: Getting SettingsStore object\r\n");
        CStdIdentity_QueryInterfaces(identity_iface, &GUID_Get_CSettingsBroker, (void **)&settingsStore_iface);
    }

    if(settingsStore_iface == NULL) 
        writeLog("[-] SettingsStore: Unable to retrieve SettingsStore object... aborting\r\n");
    else
        writeLog("[+] SettingsStore: SettingsStore object correctly retrieved\r\n");

    return settingsStore_iface;
}


/******* IERegHelperBroker Interface *****************/
/*************************************************/
IEREGHELPER_BROKER_OBJ* getIERegHelperBrokerIface() {
    iebroker_iface = getUserBrokerInterface();
        
    if(iebroker_iface == NULL) {
        writeLog("[-] IERegHelperBroker: Unable to retrieve IEUserBroker object... aborting\r\n");
        return NULL;
    }

    writeLog("[*] IERegHelperBroker: Initializing broker object\r\n");
    IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
    writeLog("[*] IERegHelperBroker: Getting IERegHelperBroker object\r\n");
    IEUserBroker_QueryInterface(iebroker_iface, &CLSID_IERegHelperBroker, &ieRegHelperBroker_iface);

    if(ieRegHelperBroker_iface == NULL) 
        writeLog("[-] IERegHelperBroker: Unable to retrieve IERegHelperBroker object... aborting\r\n");
    else
        writeLog("[+] IERegHelperBroker: IERegHelperBroker object correctly retrieved\r\n");

    return ieRegHelperBroker_iface;
}



/******* IERegHelperCleanup Interface *****************/
/*************************************************/
IEREGHELPER_CLEANUP_OBJ* getIERegHelperCleanupIface() {
    iebroker_iface = getUserBrokerInterface();
        
    if(iebroker_iface == NULL) {
        writeLog("[-] IERegHelperCleanup: Unable to retrieve IEUserBroker object... aborting\r\n");
        return NULL;
    }

    writeLog("[*] IERegHelperCleanup: Initializing broker object\r\n");
    IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
    writeLog("[*] IERegHelperCleanup: Getting IERegHelperCleanup object\r\n");
    IEUserBroker_QueryInterface(iebroker_iface, &CLSID_IERegHelperBrokerCleanup, &ieRegHelperCleanup_iface);

    if(ieRegHelperCleanup_iface == NULL) 
        writeLog("[-] IERegHelperCleanup: Unable to retrieve IERegHelperCleanup object... aborting\r\n");
    else
        writeLog("[+] IERegHelperCleanup: IERegHelperCleanup object correctly retrieved\r\n");

    return ieRegHelperCleanup_iface;
}



/******* IEBrokerAttach Interface *****************/
/*************************************************/
IEBROKERATTACH_OBJ* getIEBrokerAttachIface() {
    iebroker_iface = getUserBrokerInterface();
        
    if(iebroker_iface == NULL) {
        writeLog("[-] IEBrokerAttach: Unable to retrieve IEUserBroker object... aborting\r\n");
        return NULL;
    }

    writeLog("[*] IEBrokerAttach: Initializing broker object\r\n");
    IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
    writeLog("[*] IEBrokerAttach: Getting IEBrokerAttach object\r\n");
    IEUserBroker_QueryInterface(iebroker_iface, &CLSID_IEBrokerAttach, &ieBrokerAttach_iface);

    if(ieBrokerAttach_iface == NULL) 
        writeLog("[-] IEBrokerAttach: Unable to retrieve IEBrokerAttach object... aborting\r\n");
    else
        writeLog("[+] IEBrokerAttach: IEBrokerAttach object correctly retrieved\r\n");

    return ieBrokerAttach_iface;
}


/******* IEAxInstallBroker Interface *****************/
/*****************************************************/
IEAXINSTALLBROKER_OBJ* getIEAxInstallBrokerIface() {
    iebroker_iface = getUserBrokerInterface();
        
    if(iebroker_iface == NULL) {
        writeLog("[-] IEAxInstallBroker: Unable to retrieve IEUserBroker object... aborting\r\n");
        return NULL;
    }

    writeLog("[*] IEAxInstallBroker: Initializing broker object\r\n");
    IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
    writeLog("[*] IEAxInstallBroker: Getting IEAxInstallBroker object\r\n");
    IEUserBroker_QueryInterface(iebroker_iface, &CLSID_IEAxInstallBrokerBroker, &ieAxInstallBroker_iface);

    if(ieAxInstallBroker_iface == NULL) 
        writeLog("[-] IEAxInstallBroker: Unable to retrieve IEAxInstallBroker object... aborting\r\n");
    else
        writeLog("[+] IEAxInstallBroker: IEAxInstallBroker object correctly retrieved\r\n");

    return ieAxInstallBroker_iface;
}


/******* FeedsArbiterLoriBroker Interface *****************/
/*****************************************************/
FEEDSARBITERLORI_BROKER_OBJ* getFeedsArbiterLoriBrokerIface() {
    if(FeedsArbiterLoriBroker_iface == NULL) {
        iebroker_iface = getUserBrokerInterface();
        
        if(iebroker_iface == NULL) {
            writeLog("[-] FeedsArbiterLoriBroker: Unable to retrieve IEUserBroker object... aborting\r\n");
            return NULL;
        }

        writeLog("[*] FeedsArbiterLoriBroker: Initializing broker object\r\n");
        IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
        writeLog("[*] FeedsArbiterLoriBroker: Getting StdIdentity object\r\n");
        IEUserBroker_CreateKnownObject(iebroker_iface, &CLSID_FeedsArbiterLoriBroker, (GUID *)&GUID_FeedsArbiterLoriBroker2, &FeedsArbiterLoriBroker_iface);
        
        if(FeedsArbiterLoriBroker_iface == NULL) {
            writeLog("[-] FeedsArbiterLoriBroker: Unable to retrieve FeedsArbiterLoriBroker object... aborting\r\n");
            return NULL;
        }
        
        writeLog("[+] FeedsArbiterLoriBroker: FeedsArbiterLoriBroker object correctly retrieved\r\n");
    }
    return FeedsArbiterLoriBroker_iface;
}



/******* FeedsLoriBroker Interface *****************/
/*****************************************************/
FEEDSLORI_BROKER_OBJ* getFeedsLoriBrokerIface() {
    if(FeedsLoriBroker_iface == NULL) {
        iebroker_iface = getUserBrokerInterface();
        
        if(iebroker_iface == NULL) {
            writeLog("[-] FeedsLoriBroker: Unable to retrieve IEUserBroker object... aborting\r\n");
            return NULL;
        }

        writeLog("[*] FeedsLoriBroker: Initializing broker object\r\n");
        IEUserBroker_Initialize(iebroker_iface, 0, 0, NULL);
        writeLog("[*] FeedsLoriBroker: Getting StdIdentity object\r\n");
        IEUserBroker_CreateKnownObject(iebroker_iface, &CLSID_FeedsLoriBroker, (GUID *)&GUID_FeedsLoriBroker2, &FeedsLoriBroker_iface);
        
        if(FeedsLoriBroker_iface == NULL) {
            writeLog("[-] FeedsLoriBroker: Unable to retrieve FeedsLoriBroker_iface object... aborting\r\n");
            return NULL;
        }
        
        writeLog("[+] FeedsLoriBroker: FeedsLoriBroker_iface object correctly retrieved\r\n");
    }

    return FeedsLoriBroker_iface;
}



/******* ShellWindow Interface *****************/
/*****************************************************/
SHELLWINDOW_OBJ* getShellWindowIface() {
    IUnknown *unk = NULL;

    SH_BROKER_OBJ *shbroker = getShBrokerIface();
    if(shbroker == NULL) {
        writeLog("[+] ShellWindow: Unable to retrieve ShDocvwBroker object... aborting\r\n");
        return NULL;
    }

    if(ShellWindow_iface != NULL)
        return ShellWindow_iface;

    shbroker->iface->GetShellWindows((HANDLE)shbroker, &unk);
    if(unk == NULL) {
        writeLog("[+] ShellWindow: Unable to retrieve ShDocvwBroker object... aborting\r\n");
        return NULL;
    }

    STD_IDENTITY_OBJ *g = (STD_IDENTITY_OBJ *) unk;
    CStdIdentity_QueryInterfaces(g, &IID_ShellWindow, (void **)&ShellWindow_iface);
    //CStdIdentity_QueryInterfaces(g, &IID_ItabWindow, (void **)&ShellWindow_iface);
    

    if(ShellWindow_iface == NULL) {
            writeLog("[-] ShellWindow: Unable to retrieve ShellWindow_iface object... aborting\r\n");
            return NULL;
    }
        
    writeLog("[+] ShellWindow: ShellWindow_iface object correctly retrieved\r\n");
    return ShellWindow_iface;

}


/**********************************************/
/******* BROKER CALL WRAPPERS *****************/
/**********************************************/


// For some reason the calling convention for the broker functions is different in visual studio.
// For these reason we use naked function writing prologue and epilogue by hand to be sure that the 
// stack pointer will be correct before to return.


/*****************************/
/**** IEUserBroker object ****/
/*****************************/

__declspec(naked) void IEUserBroker_Initialize(IE_USER_BROKER_OBJ *iebroker, long a, long b, void *c) {

    PROLOGUE

    iebroker->iface->initialize((HANDLE)iebroker, a, b, c);

    EPILOGUE
}


__declspec(naked) void IEUserBroker_QueryInterface(IE_USER_BROKER_OBJ *iebroker, struct _GUID *a, void *b) {

    PROLOGUE

    iebroker->iface->queryInterface((HANDLE)iebroker, a, b);

    EPILOGUE

}


__declspec(naked) void IEUserBroker_CreateKnownObject(IE_USER_BROKER_OBJ *iebroker, struct _GUID *guid1, struct _GUID *guid2, void* identity) {

    PROLOGUE

    iebroker->iface->createKnownObject((HANDLE)iebroker, guid1, guid2, identity);

    EPILOGUE

}


/*****************************/
/**** StdIdentity object *****/
/*****************************/


__declspec(naked) void CStdIdentity_QueryInterfaces(STD_IDENTITY_OBJ *identity, struct _GUID *guid, void **container) {

    PROLOGUE

    identity->iface->QueryInterface((HANDLE)identity, guid, container);

    EPILOGUE
}


__declspec(naked) void CStdIdentity_QueryInternalInterface(STD_IDENTITY_OBJ *identity, struct _GUID *guid, void **container) {
    PROLOGUE

    identity->iface->QueryInternalInterface((HANDLE)identity, guid, container);

    EPILOGUE
}



/*********************************/
/**** ProtectedModeAPI object ****/
/*********************************/


__declspec(naked) void ProtectedModeAPI_QueryInterface(PROTECTED_MODE_OBJ *protectedmode, struct _GUID *guid, void **container) {
    PROLOGUE

    protectedmode->iface->QueryInterface((HANDLE)protectedmode, guid, container);

    EPILOGUE
}


__declspec(naked) void ProtectedModeAPI_ShowDialog(PROTECTED_MODE_OBJ *protected_mode_api, HANDLE a, LPWSTR b, LPWSTR c, LPCWSTR d, LPCWSTR e, DWORD f, DWORD g, LPWSTR *h) {

    PROLOGUE

    protected_mode_api->iface->ShowSaveFileDialog ((HANDLE)protected_mode_api, a, b, c, d, e, f, g, h);

    EPILOGUE
}


/******************************/
/**** ShdocvwBroker object ****/
/******************************/

__declspec(naked) void ShBroker_QueryInterface(SH_BROKER_OBJ *shbroker, struct _GUID *guid, void **container) {

    PROLOGUE

    shbroker->iface->QueryInterface((HANDLE)shbroker, guid, container);

    EPILOGUE
}


__declspec(naked) void ShBroker_ShowLang(SH_BROKER_OBJ *shbroker, HANDLE a) {

    PROLOGUE

    shbroker->iface->ShowInternetOptionsLanguages((HANDLE)shbroker, a);

    EPILOGUE

}


/********************************/
/**** IESettingsStore object ****/
/********************************/

__declspec(naked) void SettingsStore_QueryInterface(SETTINGSSTORE_OBJ *settings_obj, struct _GUID *guid, void **container) {
    PROLOGUE

    settings_obj->iface->QueryInterface((HANDLE)settings_obj, guid, container);

    EPILOGUE
}

__declspec(naked) void SettingsStore_DeleteValue(SETTINGSSTORE_OBJ *settings_obj, _GUID *a, int b) {
    PROLOGUE

    settings_obj->iface->DeleteValue((HANDLE)settings_obj, &CLSID_CSettingsBroker, b);

    EPILOGUE
}

/********************************/
/**** IERecoveryStore object ****/
/********************************/

__declspec(naked) void IERecoveryStore_QueryInterface(IERECOVERY_STORE_OBJ *recovery_store, struct _GUID *guid, void **container) {
    PROLOGUE

    recovery_store->iface->QueryInterface((HANDLE)recovery_store, guid, container);

    EPILOGUE
}

__declspec(naked) void IERecoveryStore_Shutdown(IERECOVERY_STORE_OBJ *recovery_store) {

    PROLOGUE

    recovery_store->iface->Shutdown(recovery_store);

    EPILOGUE
}



/********************************/
/**** IERegHelperBroker object ****/
/********************************/

__declspec(naked) void IERegHelperBroker_QueryInterface(IEREGHELPER_BROKER_OBJ *regbroker, struct _GUID *guid, void **container) {
    PROLOGUE

    regbroker->iface->QueryInterface_ad4((HANDLE)regbroker, guid, container);

    EPILOGUE
}



__declspec(naked) void IERegHelperBroker_DoCreateKey(IEREGHELPER_BROKER_OBJ *regbroker, int a) {

    PROLOGUE

    regbroker->iface->DoCreateKey((HANDLE) regbroker, a);

    EPILOGUE
}


/********************************/
/**** IERegHelperCleanup object ****/
/********************************/

__declspec(naked) void IERegHelperCleanup_QueryInterface(IEREGHELPER_CLEANUP_OBJ *regcleanup, struct _GUID *guid, void **container) {
    PROLOGUE

    regcleanup->iface->QueryInterface_ad8((HANDLE)regcleanup, guid, container);

    EPILOGUE
}

__declspec(naked) void IERegHelperCleanup_RegisterCleanup(IEREGHELPER_CLEANUP_OBJ *regcleanup, IUnknown *a) {
    PROLOGUE

    regcleanup->iface->RegisterCleanup((HANDLE)regcleanup, a);

    EPILOGUE
}


/********************************/
/**** IEBrokerAttach object ****/
/********************************/

__declspec(naked) void IEBrokerAttach_QueryInterface(IEBROKERATTACH_OBJ *brokerAttach, struct _GUID *guid, void **container) {
    PROLOGUE

    brokerAttach->iface->QueryInterface_ad16((HANDLE)brokerAttach, guid, container);

    EPILOGUE
}

__declspec(naked) void IEBrokerAttach_AttachIEFrameToBroker(IEBROKERATTACH_OBJ* brokerAttach, IUnknown *a) {
    PROLOGUE

    brokerAttach->iface->AttachIEFrameToBroker((HANDLE)brokerAttach, a);

    PROLOGUE
}

/***********************************/
/**** IEAxInstallBroker object ****/
/**********************************/
__declspec(naked) void IEAxInstallBroker_QueryInterface(IEAXINSTALLBROKER_OBJ *axinstall_broker, struct _GUID *guid, void **container) {
    PROLOGUE

    axinstall_broker->iface->QueryInterface_ad12((HANDLE)axinstall_broker, guid, container);

    EPILOGUE
}

__declspec(naked) void IEAxInstallBroker_GetAxInstallBroker(IEAXINSTALLBROKER_OBJ *axinstall_broker, HWND *win, IUnknown **e) {

    PROLOGUE

    axinstall_broker->iface->BrokerGetAxInstallBroker((HANDLE)axinstall_broker, &CLSID_CIeAxiInstaller, (GUID *)&IID_IUnknown, NULL, 1, e);

    EPILOGUE
}


/***********************************/
/**** FeedsLoriBroker object ****/
/**********************************/

__declspec(naked) void FeedsLori_QueryInterface(FEEDSLORI_BROKER_OBJ *feedslori, struct _GUID *guid, void **container) {

    PROLOGUE

    feedslori->iface->m0((HANDLE)feedslori, guid, container);

    EPILOGUE
}

/***********************************/
/**** FeedsArbiretLoriBroker object ****/
/**********************************/

__declspec(naked) void FeedsArbiterLori_QueryInterface(FEEDSARBITERLORI_BROKER_OBJ *feedsarbiterlori, struct _GUID *guid, void **container){


    PROLOGUE

    feedsarbiterlori->iface->m0((HANDLE)feedsarbiterlori, guid, container);

    EPILOGUE
}

/***********************************/
/**** ShellWindow object ****/
/**********************************/

__declspec(naked) void ShellWindow_QueryInterface(SHELLWINDOW_OBJ *shellwindow, struct _GUID *guid, void **container) {
    PROLOGUE

    shellwindow->iface->QueryInterface_ad40((HANDLE)shellwindow, guid, container);

    EPILOGUE
}