示例#1
0
HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister) 
{
    IMoniker * pMoniker;
    IRunningObjectTable *pROT;
    if (FAILED(GetRunningObjectTable(0, &pROT))) 
    {
        return E_FAIL;
    }

    WCHAR wsz[128];
    wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, 
              GetCurrentProcessId());

    HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
    if (SUCCEEDED(hr)) 
    {
        // Use the ROTFLAGS_REGISTRATIONKEEPSALIVE to ensure a strong reference
        // to the object.  Using this flag will cause the object to remain
        // registered until it is explicitly revoked with the Revoke() method.
        //
        // Not using this flag means that if GraphEdit remotely connects
        // to this graph and then GraphEdit exits, this object registration 
        // will be deleted, causing future attempts by GraphEdit to fail until
        // this application is restarted or until the graph is registered again.
        hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pUnkGraph, 
                            pMoniker, pdwRegister);
        pMoniker->Release();
    }

    pROT->Release();
    return hr;
}
示例#2
0
/***********************************************************************
 *		RegisterActiveObject (OLEAUT32.33)
 *
 * Registers an object in the global item table.
 *
 * PARAMS
 *  punk        [I] Object to register.
 *  rcid        [I] CLSID of the object.
 *  dwFlags     [I] Flags.
 *  pdwRegister [O] Address to store cookie of object registration in.
 *
 * RETURNS
 *  Success: S_OK.
 *  Failure: HRESULT code.
 */
HRESULT WINAPI RegisterActiveObject(
	LPUNKNOWN punk,REFCLSID rcid,DWORD dwFlags,LPDWORD pdwRegister
) {
	WCHAR 			guidbuf[80];
	HRESULT			ret;
	LPRUNNINGOBJECTTABLE	runobtable;
	LPMONIKER		moniker;
        DWORD                   rot_flags = ROTFLAGS_REGISTRATIONKEEPSALIVE; /* default registration is strong */

	StringFromGUID2(rcid,guidbuf,39);
	ret = CreateItemMoniker(pdelimiter,guidbuf,&moniker);
	if (FAILED(ret))
		return ret;
	ret = GetRunningObjectTable(0,&runobtable);
	if (FAILED(ret)) {
		IMoniker_Release(moniker);
		return ret;
	}
        if(dwFlags == ACTIVEOBJECT_WEAK)
          rot_flags = 0;
	ret = IRunningObjectTable_Register(runobtable,rot_flags,punk,moniker,pdwRegister);
	IRunningObjectTable_Release(runobtable);
	IMoniker_Release(moniker);
	return ret;
}
示例#3
0
static HRESULT WINAPI IHlinkBC_Register(IHlinkBrowseContext* iface,
        DWORD dwReserved, IUnknown *piunk, IMoniker *pimk, DWORD *pdwRegister)
{
    static const WCHAR szIdent[] = {'W','I','N','E','H','L','I','N','K',0};
    HlinkBCImpl  *This = impl_from_IHlinkBrowseContext(iface);
    IMoniker *mon;
    IMoniker *composite;
    IRunningObjectTable *ROT;
    HRESULT hr;

    FIXME("(%p)->(%i %p %p %p)\n", This, dwReserved, piunk, pimk, pdwRegister);

    hr = CreateItemMoniker(NULL, szIdent, &mon);
    if (FAILED(hr))
        return hr;
    CreateGenericComposite(mon, pimk, &composite);

    GetRunningObjectTable(0, &ROT);
    IRunningObjectTable_Register(ROT, 0, piunk, composite, pdwRegister);

    IRunningObjectTable_Release(ROT);
    IMoniker_Release(composite);
    IMoniker_Release(mon);

    return S_OK;
}
HRESULT
AddGraphToRunningObjectTable(IUnknown *aUnkGraph, DWORD *aOutRotRegister)
{
  HRESULT hr;

  nsRefPtr<IMoniker> moniker;
  nsRefPtr<IRunningObjectTable> runningObjectTable;

  hr = GetRunningObjectTable(0, getter_AddRefs(runningObjectTable));
  NS_ENSURE_TRUE(SUCCEEDED(hr), hr);

  const size_t STRING_LENGTH = 256;
  WCHAR wsz[STRING_LENGTH];

  StringCchPrintfW(wsz,
                   STRING_LENGTH,
                   L"FilterGraph %08x pid %08x",
                   (DWORD_PTR)aUnkGraph,
                   GetCurrentProcessId());

  hr = CreateItemMoniker(L"!", wsz, getter_AddRefs(moniker));
  NS_ENSURE_TRUE(SUCCEEDED(hr), hr);

  hr = runningObjectTable->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE,
                                    aUnkGraph,
                                    moniker,
                                    aOutRotRegister);
  NS_ENSURE_TRUE(SUCCEEDED(hr), hr);

  return S_OK;
}
示例#5
0
// address: 0x4012f8
void _start(int param1, int param2, int param3, int param4, RECT param5, int param6) {
    int eax; 		// r24
    union { __size32 * x7; unsigned int x8; } eax_1; 		// r24{257}
    int ecx; 		// r25
    int edx; 		// r26
    unsigned int edx_1; 		// r26{338}
    int esp; 		// r28

    eax = GetCurrentProcessId();
    if (eax != 1019) {
    }
    CharUpperA();
    OpenEventW();
    GetDC();
    eax = GetCurrentThreadId(); /* Warning: also results in ecx */
    if (eax == 621) {
        ecx = ecx ^ param6;
    }
    if (ecx != 0) {
    }
    __set_app_type();
    GetFileAttributesA();
    CharUpperA();
    GetProcessHeap();
    CharUpperA();
    OpenMutexA();
    IsWindow();
    eax = GetCurrentThreadId(); /* Warning: also results in ecx */
    if ((eax & 0xae4) != ecx) {
    }
    eax = GetClientRect(0, &param5); /* Warning: also results in edx */
    eax = eax | param4;
    if (eax != edx) {
        eax = (esp - 552);
        edx = edx ^ param2;
        edx = edx ^ param3;
        edx = edx & param1;
    }
    eax_1 = eax;
    edx_1 = edx;
    edx = edx_1 ^ 0x21cd;
    flags = SUBFLAGS32(eax_1, edx_1 ^ 0x21cd, eax_1 - (edx_1 ^ 0x21cd));
    if (eax_1 != (edx_1 ^ 0x21cd)) {
        edx = (edx_1 ^ 0x21cd) + (edx_1 ^ 0x21cd) + (eax_1 < (unsigned int)(edx_1 ^ 0x21cd));
        eax_1 = eax_1 - 0x3421;
        flags = SUBFLAGS32(eax_1, 0x3421, eax_1 - 0x3421);
    }
    if (eax_1 + edx + CF == 816) {
    }
    eax = CreateItemMoniker(); /* Warning: also results in edx */
    if ((eax ^ 0x80070057) == 0) {
        if ((eax ^ 0x80070057) + edx == 0) {
        }
    }
    return;
}
示例#6
0
SCODE _AfxParseDisplayName(LPMONIKER lpmk, LPBC lpbc, LPTSTR lpszRemainder,
	ULONG* cchEaten, LPMONIKER* plpmkOut)
{
	USES_CONVERSION;

	ASSERT(lpmk != NULL);
	ASSERT(AfxIsValidString(lpszRemainder));
	ASSERT(cchEaten != NULL);
	ASSERT(plpmkOut != NULL);

	SCODE sc;
	if (lpbc != NULL)
	{
		// ask moniker to parse the display name itself
		sc = lpmk->ParseDisplayName(lpbc, NULL, T2OLE(lpszRemainder), cchEaten,
			plpmkOut);
	}
	else
	{
		// skip leading delimiters
		int cEaten = 0;
		LPTSTR lpszSrc = lpszRemainder;
		while (*lpszSrc != '\0' && (*lpszSrc == '\\' || *lpszSrc == '/' ||
			*lpszSrc == ':' || *lpszSrc == '!' || *lpszSrc == '['))
		{
			if (_istlead(*lpszSrc))
				++lpszSrc, ++cEaten;
			++lpszSrc;
			++cEaten;
		}

		// parse next token in lpszRemainder
		TCHAR szItemName[_MAX_PATH];
		LPTSTR lpszDest = szItemName;
		while (*lpszSrc != '\0' && *lpszSrc != '\\' && *lpszSrc != '/' &&
			*lpszSrc != ':' && *lpszSrc != '!' && *lpszSrc != '[' &&
			cEaten < _MAX_PATH-1)
		{
			if (_istlead(*lpszSrc))
				*lpszDest++ = *lpszSrc++, ++cEaten;
			*lpszDest++ = *lpszSrc++;
			++cEaten;
		}
		*cchEaten = cEaten;
		sc = CreateItemMoniker(OLESTDDELIMOLE, T2COLE(szItemName), plpmkOut);
	}

	return sc;
}
示例#7
0
HRESULT AddGraphToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
{
    IMoniker * pMoniker;
    IRunningObjectTable *pROT;
    if (FAILED(GetRunningObjectTable(0, &pROT))) {
        return E_FAIL;
    }
    WCHAR wsz[128];
    wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
    HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
    if (SUCCEEDED(hr)) {
        hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
        pMoniker->Release();
    }
    pROT->Release();
    return hr;
}
示例#8
0
//////////////////////// For GraphEdit Dubug purpose /////////////////////////////
void CDXGraph::AddToObjectTable(void)
{
	IMoniker * pMoniker = 0;
    IRunningObjectTable * objectTable = 0;
    if (SUCCEEDED(GetRunningObjectTable(0, &objectTable))) 
	{
		WCHAR wsz[256];
		wsprintfW(wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)mGraph, GetCurrentProcessId());
		HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
		if (SUCCEEDED(hr)) 
		{
			hr = objectTable->Register(0, mGraph, pMoniker, &mObjectTableEntry);
			pMoniker->Release();
		}
		objectTable->Release();
	}
}
HRESULT CTsReaderFilter::AddGraphToRot(IUnknown *pUnkGraph)
{
  CComPtr <IMoniker>              pMoniker;
  CComPtr <IRunningObjectTable>   pROT;
  WCHAR wsz[128];
  HRESULT hr;

  if (m_dwGraphRegister!=0) return S_OK;
  if (FAILED(GetRunningObjectTable(0, &pROT)))
      return E_FAIL;

  swprintf(wsz, L"FilterGraph %08x pid %08x\0", (DWORD_PTR) pUnkGraph, GetCurrentProcessId());
  hr = CreateItemMoniker(L"!", wsz, &pMoniker);
  if (SUCCEEDED(hr))
  {
    hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pUnkGraph, pMoniker, &m_dwGraphRegister);
  }
  return hr;
}
示例#10
0
    static HRESULT AddToRot(IUnknown *pUnkGraph, DWORD *pdwRegister)
    {
        IMoniker *pMoniker = NULL;
        IRunningObjectTable *pROT = NULL;

        if (FAILED(GetRunningObjectTable(0, &pROT)))
            return E_FAIL;

        WCHAR wsz[256];
        StringCchPrintfW(wsz, 256, L"FilterGraph %08x pid %08x (dsnative)", (DWORD_PTR) pUnkGraph, GetCurrentProcessId());
        HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
        if (SUCCEEDED(hr))
        {
            hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pUnkGraph, pMoniker, pdwRegister);
            pMoniker->Release();
        }
        pROT->Release();

        return hr;
    }
示例#11
0
//Добавляет текущий Filter Graph в ROT (Running Object Table)
//В случае ошибки функция вернет значение меньше нуля
int CDirectShow::AddFGToROT()
{
	if (m_pGraphBuilder)
	{
		IMoniker *pMoniker = NULL;
		IRunningObjectTable *pRunningObjectTable = NULL;
		if (FAILED(GetRunningObjectTable(0, &pRunningObjectTable)))
		{
			return -1;
		}
		WCHAR lpwItem[256] = { 0 };
		swprintf(lpwItem, L"FilterGraph %08p pid %08x", (LPDWORD)m_pGraphBuilder, GetCurrentProcessId());
		if (FAILED(CreateItemMoniker(L"!", lpwItem, &pMoniker))) return -1;
		pRunningObjectTable->Register(0, m_pGraphBuilder, pMoniker, &m_dwROTRegister);
		pMoniker->Release();
		pRunningObjectTable->Release();
		return 0;
	}
	else return -1;
}
示例#12
0
/***********************************************************************
 *		GetActiveObject (OLEAUT32.35)
 *
 * Gets an object from the global item table.
 *
 * PARAMS
 *  rcid        [I] CLSID of the object.
 *  preserved   [I] Reserved. Set to NULL.
 *  ppunk       [O] Address to store object into.
 *
 * RETURNS
 *  Success: S_OK.
 *  Failure: HRESULT code.
 */
HRESULT WINAPI GetActiveObject(REFCLSID rcid,LPVOID preserved,LPUNKNOWN *ppunk)
{
	WCHAR 			guidbuf[80];
	HRESULT			ret;
	LPRUNNINGOBJECTTABLE	runobtable;
	LPMONIKER		moniker;

	StringFromGUID2(rcid,guidbuf,39);
	ret = CreateItemMoniker(pdelimiter,guidbuf,&moniker);
	if (FAILED(ret))
		return ret;
	ret = GetRunningObjectTable(0,&runobtable);
	if (FAILED(ret)) {
		IMoniker_Release(moniker);
		return ret;
	}
	ret = IRunningObjectTable_GetObject(runobtable,moniker,ppunk);
	IRunningObjectTable_Release(runobtable);
	IMoniker_Release(moniker);
	return ret;
}
示例#13
0
// Adds a DirectShow filter graph to the Running Object Table,
// allowing GraphEdit to "spy" on a remote filter graph.
HRESULT CBDAFilterGraph::AddGraphToRot(
        IUnknown *pUnkGraph, 
        DWORD *pdwRegister
        ) 
{
    CComPtr <IMoniker>              pMoniker;
    CComPtr <IRunningObjectTable>   pROT;
    WCHAR wsz[128];
    HRESULT hr;

    if (FAILED(GetRunningObjectTable(0, &pROT)))
        return E_FAIL;

    wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, 
              GetCurrentProcessId());

    hr = CreateItemMoniker(L"!", wsz, &pMoniker);
    if (SUCCEEDED(hr)) 
        hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);
    return hr;
}
示例#14
0
文件: oleaut.c 项目: howard5888/wineT
/***********************************************************************
 *		RegisterActiveObject (OLEAUT32.33)
 *
 * Registers an object in the global item table.
 *
 * PARAMS
 *  punk        [I] Object to register.
 *  rcid        [I] CLSID of the object.
 *  dwFlags     [I] Flags.
 *  pdwRegister [O] Address to store cookie of object registration in.
 *
 * RETURNS
 *  Success: S_OK.
 *  Failure: HRESULT code.
 */
HRESULT WINAPI RegisterActiveObject(
	LPUNKNOWN punk,REFCLSID rcid,DWORD dwFlags,LPDWORD pdwRegister
) {
	WCHAR 			guidbuf[80];
	HRESULT			ret;
	LPRUNNINGOBJECTTABLE	runobtable;
	LPMONIKER		moniker;

	StringFromGUID2(rcid,guidbuf,39);
	ret = CreateItemMoniker(pdelimiter,guidbuf,&moniker);
	if (FAILED(ret))
		return ret;
	ret = GetRunningObjectTable(0,&runobtable);
	if (FAILED(ret)) {
		IMoniker_Release(moniker);
		return ret;
	}
	ret = IRunningObjectTable_Register(runobtable,dwFlags,punk,moniker,pdwRegister);
	IRunningObjectTable_Release(runobtable);
	IMoniker_Release(moniker);
	return ret;
}
示例#15
0
// Function name	: CVMR9Graph::AddToRot
// Description	    : let the graph instance be accessible from graphedit
// Return type		: HRESULT 
// Argument         : IUnknown *pUnkGraph
// Argument         : DWORD *pdwRegister
HRESULT CVMR9Graph::AddToRot(IUnknown *pUnkGraph) 
{
	if (pUnkGraph == NULL) {
		return E_INVALIDARG;
	}

    IMoniker * pMoniker;
    IRunningObjectTable *pROT;
    if (FAILED(GetRunningObjectTable(0, &pROT))) {
        return E_FAIL;
    }
    WCHAR wsz[256];
    wsprintfW(wsz, L"FilterGraph %08x pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());
    HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);
    if (SUCCEEDED(hr)) {
        hr = pROT->Register(0, pUnkGraph, pMoniker, &m_dwRotId);
        pMoniker->Release();
    }
    pROT->Release();

    return hr;
}
示例#16
0
//-----------------------------------------------------------------------------
// AddGraphToRot
// Adds a DirectShow filter graph to the Running Object Table,
// allowing GraphEdit to "spy" on a remote filter graph.
HRESULT CDSUtils::AddGraphToRot(IUnknown* pUnkGraph, DWORD* pdwRegister)
{
    HRESULT hr = S_OK;

    if (pUnkGraph && pdwRegister)
	{
		CComPtr<IRunningObjectTable> pROT = NULL;
		hr = GetRunningObjectTable(0, &pROT);
		if (SUCCEEDED(hr))
		{
			WCHAR wsz[128];
			StringCchPrintfW(wsz, 128, L"FilterGraph %08x pid %08x\0", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());

			CComPtr<IMoniker> pMoniker = NULL;
			hr = CreateItemMoniker(L"!", wsz, &pMoniker);
			if(SUCCEEDED(hr))
			{
				// Use the ROTFLAGS_REGISTRATIONKEEPSALIVE to ensure a strong reference
				// to the object.  Using this flag will cause the object to remain
				// registered until it is explicitly revoked with the Revoke() method.
				//
				// Not using this flag means that if GraphEdit remotely connects
				// to this graph and then GraphEdit exits, this object registration
				// will be deleted, causing future attempts by GraphEdit to fail until
				// this application is restarted or until the graph is registered again.
				hr = pROT->Register(ROTFLAGS_REGISTRATIONKEEPSALIVE, pUnkGraph, pMoniker, pdwRegister);
			}
		}
	}
	else
	{
		hr = E_INVALIDARG;
	}

    return hr;
}
示例#17
0
// register in the running object table for graph debugging
STDMETHODIMP 
BridgeSource::JoinFilterGraph(IFilterGraph * pGraph, LPCWSTR pName)
{
    HRESULT hr = CBaseFilter::JoinFilterGraph(pGraph, pName);

    // for debugging, we register in the ROT so that you can use
    // Graphedt's Connect command to view the graphs
    // disabled by default owing to refcount leak issue
    if (false) //SUCCEEDED(hr))
    {
        if (pGraph == NULL)
        {
            if (m_dwROT) {
                IRunningObjectTablePtr pROT;
                if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) {
                    pROT->Revoke(m_dwROT);
                }
            }
        } else {
            IMonikerPtr pMoniker;
            IRunningObjectTablePtr pROT;
            if (SUCCEEDED(GetRunningObjectTable(0, &pROT))) {
				ostringstream strm;
				DWORD graphaddress = (DWORD)((DWORD_PTR)(IUnknown*)pGraph) & 0xFFFFFFFF;
				strm << "FilterGraph " << hex << graphaddress << " pid " << hex << GetCurrentProcessId();
				_bstr_t strName = strm.str().c_str();
                HRESULT hr = CreateItemMoniker(L"!", strName, &pMoniker);
                if (SUCCEEDED(hr)) {
                    hr = pROT->Register(0, pGraph, pMoniker, &m_dwROT);
                }
            }
        }
    }

    return hr;
}
示例#18
0
int BookServerTest::readItemMoniker()
{
	ComPtr<IStorage> pStorage;
	ComPtr<IStream> pStream;
	auto hr = StgOpenStorageEx(kMonikerFileName,
		STGM_READ | STGM_SHARE_EXCLUSIVE | STGM_DIRECT, STGFMT_STORAGE, 0, NULL, 0, IID_IStorage, (void**)&pStorage);
	if (FAILED(hr))
		return hr;
	hr = pStorage->OpenStream(kStreamName, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &pStream);
	if (FAILED(hr))
		return hr;
	IBindCtx* pbc;
	CreateBindCtx(0, &pbc);
	ComPtr<IMoniker> bkMoniker;
	OleLoadFromStream(pStream, IID_IMoniker, (void**)&bkMoniker);

	{
		ComPtr<IBook> book;
		ComPtr<IBook> book2;
		auto hr = bkMoniker->BindToObject(pbc, NULL, IID_IBook, (void**)&book);
		assert(book);
		//hr = bkMoniker->BindToObject(pbc, NULL, IID_IBook, (void**)&book2);
		//assert(book2);
	}

	{
		ComPtr<IMoniker> chMoniker;
		CreateItemMoniker(L"!", L"chapter0", &chMoniker);
		ComPtr<IChapter> chObj;
		hr = chMoniker->BindToObject(pbc, bkMoniker, IID_IChapter, (void**)&chObj);
		if (FAILED(hr))
			return hr;
		ComBSTR chName;
		chObj->get_name(&chName);
		assert(chName == L"概述");
	}

	{
		ComPtr<ISection> secObj;
		ComPtr<IMoniker> chMoniker;
		ComPtr<IMoniker> secMoniker;
		CreateItemMoniker(L"!", L"chapter0", &chMoniker);
		CreateItemMoniker(L"!", L"section0", &secMoniker);
		ComPtr<IMoniker> composeMoniker;
		chMoniker->ComposeWith(secMoniker, FALSE, &composeMoniker);
		hr = composeMoniker->BindToObject(pbc, bkMoniker, IID_ISection, (void**)&secObj);
		if (FAILED(hr))
			return hr;
		ComBSTR name;
		secObj->get_name(&name);
	}

	//ComPtr<IMoniker> secMoniker;
	//CreateItemMoniker(L"!", L"section0", &secMoniker);
	//ComPtr<ISection> secObj;
	//hr = secMoniker->BindToObject(pbc, bkMoniker, IID_ISection, (void**)&secObj);
	//if (FAILED(hr))
	//	return hr;
	//ComBSTR secName;
	//secObj->get_name(&secName);
	//assert(secName == L"how to read this book");

	//chObj = NULL;
	//ComPtr<IMoniker> composeMoniker;
	//hr = bkMoniker->ComposeWith(chMoniker, FALSE, &composeMoniker);
	//if (FAILED(hr))
	//	return hr;
	//composeMoniker->BindToObject(pbc, NULL, IID_IChapter, (void**)&chObj);
	//chObj->get_name(&chName);
	//assert(chName == L"概述");
	//CreateGenericComposite(bkMoniker, chMoniker, &composeMoniker);
	return 0;
}
示例#19
0
void fn004012F8(word32 edx, word32 ebp, word32 dwArg00, word32 dwArg01, word32 dwArg05, word32 dwArg0B)
{
// def fp
// def dwArg00
// def dwArg01
// def dwLoc0120
// def dwLocB8
// def dwLoc0180
// def dwLoc03
// def dwLoc0154
// def dwLoc01B4
// def dwArg0B
// def dwLoc010E
// def dwLoc0118
// def dwLoc4C
// def dwLoc8C
// def dwLoc0234
// def dwLocBD
// def dwLocC3
// def dwLoc0225
// def dwLoc021C
// def dwLoc0227
// def dwLoc0140
// def dwArg05
	eax_7 = GetCurrentProcessId();
	if (eax_7 != 0x000003FB)
		;
	dwLoc0268_28 = fp - 0x00000004;
	v15_29 = fp - 0x00000098;
	dwLoc0268_30 = fp - 0x00000098;
	CharUpperA(fp - 0x00000098);
	ecx_36 = &fp->dwFFFFFD98;
	dwLoc0268_38 = &fp->dwFFFFFD98;
	dwLoc026C_41 = 0x00000000;
	dwLoc0270_43.u0 = 0x00000000;
	OpenEventW(0x00000000, 0x00000000, &fp->dwFFFFFD98);
	dwLoc0268_52 = 0x00000000;
	GetDC(0x00000000);
	eax_55 = GetCurrentThreadId();
	if (eax_55 == 0x0000026D)
		ecx_595 = &fp->dwFFFFFD98 ^ dwArg05;
// ecx_64 = PHI(ecx_36, ecx_595)
	esp_68 = fp - 0x00000268;
	fp->dwFFFFFD98 = 0x00000002;
	if (ecx_64 != 0x00000000)
		;
	__set_app_type();
	dwLoc026C_85 = fp - 0x00000004;
	v20_86 = fp - 0x000000B4;
	dwLoc026C_87 = fp - 0x000000B4;
	GetFileAttributesA(fp - 0x000000B4);
	dwLoc026C_92 = &fp->dwFFFFFD98;
	CharUpperA(&fp->dwFFFFFD98);
	GetProcessHeap();
	dwLoc026C_98 = &fp->dwFFFFFD98;
	eax_99 = CharUpperA(&fp->dwFFFFFD98);
	dwLoc026C_107 = &fp->dwFFFFFD98;
	esp_108 = &fp->tFFFFFD90;
	fp->tFFFFFD90.u0 = 0x00000000;
	eax_110 = eax_99 & 0x00000008;
	dwLoc0274_112 = eax_99 & 0x00000008;
	eax_113 = OpenMutexA(eax_99 & 0x00000008, 0x00000000, &fp->dwFFFFFD98);
	ecx_115 = &fp->dwFFFFFD98 & 0x0000011C;
	eax_118 = eax_113 - dwArg00;
	ecx_120 = ecx_115 - dwArg01;
	dwLoc026C_122 = eax_118;
	IsWindow(eax_118);
	v22_126 = dwLoc0120 - (fp - 0x00000004);
	dwLoc0120_127 = v22_126;
	edx_128 = fp - 0x00000004 ^ 0x00000611;
	eax_129 = GetCurrentThreadId();
	eax_130 = eax_129 & 0x00000AE4;
	if ((eax_129 & 0x00000AE4) != ecx_120)
	{
		edx_564 = edx_128 | ecx_120;
		ecx_566 = ecx_120 | dwLoc0140;
		v25_570 = dwLocB8 + ecx_566;
		dwLocB8_571 = v25_570;
		ecx_572 = fp - 0x00000004;
	}
// dwLocB8_142 = PHI(dwLocB8, dwLocB8_571)
// ecx_143 = PHI(ecx_120, ecx_572)
// edx_144 = PHI(edx_128, edx_564)
	dwLoc026C_148 = fp - 0x00000004;
	v26_149 = fp - 0x00000060;
	dwLoc026C_150 = fp - 0x00000060;
	esp_151 = &fp->tFFFFFD90;
	fp->tFFFFFD90.u0 = 0x00000000;
	eax_153 = GetClientRect(0x00000000, fp - 0x00000060);
	eax_156 = eax_153 | dwLoc0180;
	if (eax_156 != edx_144)
	{
		eax_552 = &fp->dwFFFFFD98;
		edx_556 = edx_144 ^ dwLoc0225;
		edx_558 = edx_556 ^ dwLoc021C;
		edx_560 = edx_558 & dwLoc0227;
	}
// edx_165 = PHI(edx_144, edx_560)
// eax_166 = PHI(eax_156, eax_552)
	edx_169 = edx_165 ^ 0x000021CD;
	SCZO_170 = cond(eax_166 - edx_169);
	C_173 = SCZO_170;
	if (eax_166 != edx_169)
	{
		edx_534 = edx_169 * 0x00000002 + (eax_166 <u edx_169);
		ecx_535 = ecx_143 + v22_126;
		eax_542 = eax_166 - 0x00003421;
		SCZO_545 = cond(eax_542);
		C_548 = SCZO_545;
	}
// ecx_179 = PHI(ecx_143, ecx_535)
// edx_180 = PHI(edx_169, edx_534)
// eax_181 = PHI(eax_166, eax_542)
// C_182 = PHI(C_173, C_548)
	esp_183 = &fp->tFFFFFD90;
	fp->tFFFFFD90.u0 = 0x00000000;
	eax_185 = eax_181 + edx_180 + C_182;
	if (eax_185 == 0x00000330)
	{
		edx_530 = edx_180 ^ 0x00001DF0;
		ecx_531 = ecx_179 - 0x0000292F;
	}
// ecx_193 = PHI(ecx_179, ecx_531)
// edx_194 = PHI(edx_180, edx_530)
	dwLoc0274_197 = 0x00000000;
	eax_198 = CreateItemMoniker(0x00000000, 0x00000000, null);
	eax_200 = eax_198 ^ 0x80070057;
	if ((eax_198 ^ 0x80070057) == 0x00000000)
	{
		eax_271 = (eax_198 ^ 0x80070057) + edx_194;
		if (eax_271 == 0x00000000)
		{
			edx_521 = &fp->dwFFFFFD98;
			eax_522 = eax_271 - dwLocB8_142;
			ecx_525 = ecx_193 & dwLocBD;
			ecx_527 = ecx_525 - dwLocC3;
		}
// ecx_278 = PHI(ecx_193, ecx_527)
// edx_279 = PHI(edx_194, edx_521)
// eax_280 = PHI(eax_271, eax_522)
		esp_281 = &fp->dwFFFFFD94;
		fp->dwFFFFFD94 = eax_280;
		esp_283 = &fp->tFFFFFD90;
		fp->tFFFFFD90 = ecx_278;
		esp_285 = &fp->dwFFFFFD8C;
		fp->dwFFFFFD8C = edx_279;
		ecx_299 = ecx_278 & 0x00002F37;
		ecx_305 = ecx_299 + dwLoc03;
		if (fp - 0x00000004 != ecx_305)
			ecx_508 = &fp->dwFFFFFD98;
// ecx_316 = PHI(ecx_305, ecx_508)
		if (ecx_316 != 0x00000000)
			;
		dwLoc0294_329 = 0x00002000;
		dwLoc0298_334 = 0x00000000;
		eax_337 = VirtualAlloc(0x00000000, 0x00002000, 0x00001000, 0x00000040);
		dwLoc0218_340 = eax_337;
		if (dwLoc0154 == ecx_316)
		{
			ecx_487 = ecx_316 + 0x00001D56;
			ecx_491 = ecx_487 ^ 0x00002863;
		}
// ecx_350 = PHI(ecx_316, ecx_491)
		ecx_354 = ecx_350 - dwLoc01B4;
		ecx_358 = ecx_354 | dwArg0B;
		eax_361 = fp - 0x00000004 ^ dwLoc010E;
		eax_363 = eax_361 + dwLoc0118;
		edi_365 = &globals->dw412E33;
		ecx_366 = ecx_358 + eax_363;
		esi_367 = eax_337;
		edx_370 = fp + 0xFFFFDB3F;
		dwLoc68_371 = 0xA37A6ED7;
		ecx_372 = ecx_366 - 0x000028C3;
		if (ecx_366 != 0x000028C3)
		{
			ecx_475 = ecx_366 - 0x000028C3 | 0x000028C3;
			goto l00401606;
		}
l00401606:
		do
		{
// dwLoc68_378 = PHI(dwLoc68_371, dwLoc68_371, dwLoc68_393)
// edi_382 = PHI(edi_365, edi_365, edi_413)
// esi_383 = PHI(esi_367, esi_367, esi_415)
// ecx_384 = PHI(ecx_372, ecx_475, ecx_402)
// edx_385 = PHI(edx_370, edx_370, edx_414)
// eax_386 = PHI(eax_363, eax_363, eax_424)
			ebx_388 = *edi_382;
			ecx_390 = ecx_384 ^ dwLoc4C;
			ebx_391 = ebx_388 + dwLoc68_378;
			v44_392 = dwLoc68_378 + 0x623ED7F6;
			dwLoc68_393 = v44_392;
			ecx_394 = ecx_390 & edx_385;
			C_395 = false;
			edx_396 = edx_385 - eax_386;
			Mem397[esi_383 + 0x00000000:word32] = ebx_391;
			eax_398 = eax_386 | 0x00002279;
			edi_400 = edi_382 + 20138706;
			ecx_402 = ecx_394 - dwLoc8C;
			esi_404 = esi_383 + 0xA596E2A8;
			if (eax_398 == 0x000003EF)
			{
				eax_466 = eax_398 | 0x000038A7;
				edx_468 = &fp->dwFFFFFD98 - ecx_402;
				eax_469 = (eax_398 | 0x000038A7) & 0x00003565;
			}
// edx_410 = PHI(edx_396, edx_468)
// eax_412 = PHI(eax_398, eax_469)
			edi_413 = edi_400 + 0x04CD2B4C;
			edx_414 = edx_410 + 0x00003BBE;
			esi_415 = esi_404 + 0x5A691D5C;
			if ((dwLoc0234 & ecx_402) != 0x00000000)
				eax_461 = eax_412 ^ 0x000034ED;
// eax_424 = PHI(eax_412, eax_461)
		} while (edi_413 != &globals->dw413EBF);
		dwLoc0218_340();
		if (eax_424 == edx_414)
			;
	}