Beispiel #1
0
// address: 0x1310156e
void _start() {
    unsigned int eax; 		// r24

    eax = BindMoniker();
    if (eax == 0x80070057) {
    }
    eax = GetACP();
/* goto (eax * 4) + 0x4001000*/
}
Beispiel #2
0
JNIEXPORT jlong JNICALL Java_com4j_Native_getObject(
	JNIEnv* env, jclass __unused__, jstring _fileName, jstring _progId) {

	HRESULT hr;

	if(_progId==NULL) {
		// case 1: just file name
		IBindCtxPtr pbc;
		ULONG cEaten;
		IMonikerPtr pmk;
		IDispatch* pDisp;

		hr = CreateBindCtx(NULL,&pbc);
		if(FAILED(hr)) {
			error(env,__FILE__,__LINE__,hr,"Failed to CreateBindCtx");
			return 0;
		}
		hr = MkParseDisplayName(pbc,JString(env,_fileName),&cEaten,&pmk);
		if(FAILED(hr)) {
			error(env,__FILE__,__LINE__,hr,"Failed to MkParseDisplayName");
			return 0;
		}
		hr = BindMoniker(pmk,0,__uuidof(IDispatch),(LPVOID*)&pDisp);
		if(FAILED(hr)) {
			error(env,__FILE__,__LINE__,hr,"Failed to bind moniker");
			return 0;
		}

		return reinterpret_cast<jlong>(pDisp);
	}

	JString progId(env,_progId);
	CLSID clsid;
	IUnknown* pUnk=NULL;

	hr = CLSIDFromProgID(progId,&clsid);
	if(FAILED(hr)) {
		error(env,__FILE__,__LINE__,hr,"Unrecognized progID");
		return 0;
	}

	if(_fileName==NULL) {
		// case 2: just progId
		hr = GetActiveObject(clsid,NULL,&pUnk);
		if(FAILED(hr)) {
			error(env,__FILE__,__LINE__,hr,"Failed to GetActiveObject");
			return 0;
		}
		return reinterpret_cast<jlong>(pUnk);
	}

	// case 3: both file name and progID
	hr = CoCreateInstance(clsid,NULL,CLSCTX_SERVER,__uuidof(IUnknown),(LPVOID*)&pUnk);
	if(FAILED(hr)) {
		error(env,__FILE__,__LINE__,hr,"Failed to create CoCreateInstance");
		return 0;
	}

	IPersistFilePtr ppf(pUnk);
	hr = ppf->Load(JString(env,_fileName),0);
	if(FAILED(hr)) {
		error(env,__FILE__,__LINE__,hr,"Failed to load from file");
		pUnk->Release();
		return 0;
	}

	return reinterpret_cast<jlong>(pUnk);
}