80 static const WCHAR dotnet_key[] = {
'S',
'O',
'F',
'T',
'W',
'A',
'R',
'E',
'\\',
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
'.',
'N',
'E',
'T',
'F',
'r',
'a',
'm',
'e',
'w',
'o',
'r',
'k',
'\\',0};
81 static const WCHAR install_root[] = {
'I',
'n',
's',
't',
'a',
'l',
'l',
'R',
'o',
'o',
't',0};
122 IClassFactory_AddRef( iface );
173 hr = IUnknown_QueryInterface(
punk,
riid, ppobj );
175 IUnknown_Release(
punk );
179 WARN(
"Cannot create an instance object. 0x%08lx\n",
hr);
186 FIXME(
"(%p)->(%d),stub!\n",iface,dolock);
205 ICLRRuntimeInfo *
info;
219 ICLRRuntimeInfo_Release(
info);
238 int remaining_buffer =
sizeof(
tls->buffer) -
tls->length;
240 const char *newline =
memchr(
string,
'\n',
min(
length, remaining_buffer));
244 length = newline -
string + 1;
249 else if (
length > remaining_buffer)
254 string += remaining_buffer;
272 sprintf(
msg,
"%s%s%s\n", log_domain ? log_domain :
"", log_domain ?
": " :
"",
message);
315 FIXME(
"Directly running .NET applications not supported.\n");
321 TRACE(
"(%x)\n", exitCode);
327 TRACE(
"(%p): stub\n", imageBase);
338 ICLRRuntimeInfo *
info;
353 ICLRRuntimeInfo_Release(
info);
361 ICLRRuntimeInfo *
info;
376 ICLRRuntimeInfo_Release(
info);
384 ERR_(winediag)(
"If this function is called, it is likely the result of a broken .NET installation\n");
394 ERR_(winediag)(
"If this function is called, it is likely the result of a broken .NET installation\n");
404 ICLRRuntimeInfo *
info;
407 TRACE(
"(%s, %s, %s, 0x%08lx, 0x%08lx, %p, 0x%08lx, %p, %p, 0x%08lx, %p)\n",
debugstr_w(pExe),
408 debugstr_w(pwszVersion),
debugstr_w(pConfigurationFile), startupFlags, runtimeInfoFlags, pDirectory,
409 dwDirectory, dwDirectoryLength, pVersion,
cchBuffer, dwlength);
411 if (!dwDirectoryLength) dwDirectoryLength = &length_dummy;
413 if (!dwlength) dwlength = &length_dummy;
420 ret = ICLRRuntimeInfo_GetVersionString(
info, pVersion, dwlength);
425 pVersion[0] = pwszVersion[0];
427 *dwDirectoryLength = dwDirectory;
428 ret = ICLRRuntimeInfo_GetRuntimeDirectory(
info, pDirectory, dwDirectoryLength);
431 ICLRRuntimeInfo_Release(
info);
444 return GetRequestedRuntimeInfo(pExe,
NULL,
NULL, 0, 0,
NULL, 0,
NULL, pVersion,
cchBuffer, dwlength);
469 static const WCHAR default_version[] = {
'v',
'1',
'.',
'1',
'.',
'4',
'3',
'2',
'2',0};
470 static const WCHAR slash[] = {
'\\',0};
480 ERR(
"error reading registry key for installroot\n");
506 FIXME(
"(%p %p %p): stub\n", hostCallback, pBeginHostSetup, pEndHostSetup);
512 FIXME(
"(0x%08lx): stub\n", fFlags);
531 if ((iBufLen <= 0) || !
pBuffer)
535 FIXME(
"(%ld, %x, %p, %d, %d, %p): semi-stub\n",
culture, resId,
pBuffer, iBufLen, bQuiet, pBufLen);
554 ICLRRuntimeInfo *
info;
567 ICLRRuntimeInfo_Release(
info);
576 ICLRRuntimeInfo *
info;
588 ICLRRuntimeInfo_Release(
info);
597 ICLRRuntimeInfo *
info;
611 ICLRRuntimeInfo_Release(
info);
622 ret = IUnknown_QueryInterface(unk,
riid, ppObject);
623 IUnknown_Release(unk);
650 static const WCHAR v2_0[] = {
'v',
'2',
'.',
'0',
'.',
'5',
'0',
'7',
'2',
'7',0};
652 ICLRRuntimeInfo *runtimeinfo;
654 if(nDebugVersion < 1 || nDebugVersion > 4)
670 if(nDebugVersion != 3)
676 hr = ICLRRuntimeInfo_GetInterface(runtimeinfo, &CLSID_CLRDebuggingLegacy, &IID_ICorDebug, (
void**)
ppv);
678 ICLRRuntimeInfo_Release(runtimeinfo);
723 This->clsid = *rclsid;
725 hr = IClassFactory_QueryInterface( &
This->IClassFactory_iface,
riid,
ppv );
726 IClassFactory_Release(&
This->IClassFactory_iface);
733 const char *minor_start, *build_start;
745 build_start =
strchr(minor_start,
'.');
753 int a_parts[3], b_parts[3],
i;
759 if (a_parts[
i] != b_parts[
i])
760 return a_parts[
i] - b_parts[
i];
774 static const WCHAR controlW[] = {
'\\',
'c',
'o',
'n',
't',
'r',
'o',
'l',
'.',
'e',
'x',
'e',0};
775 static const WCHAR argsW[] =
776 {
' ',
'a',
'p',
'p',
'w',
'i',
'z',
'.',
'c',
'p',
'l',
' ',
'i',
'n',
's',
't',
'a',
'l',
'l',
'_',
'm',
'o',
'n',
'o',0};
779 memcpy(app+
len, controlW,
sizeof(controlW));
805 static const WCHAR support_msi_relative[] = {
'\\',
's',
'u',
'p',
'p',
'o',
'r',
't',
'\\',
'w',
'i',
'n',
'e',
'm',
'o',
'n',
'o',
'-',
's',
'u',
'p',
'p',
'o',
'r',
't',
'.',
'm',
's',
'i',0};
810 char versionstringbuf[15];
819 lstrcatW(msi_path, support_msi_relative);
821 pMsiOpenPackageW = (
void*)
GetProcAddress(hmsi,
"MsiOpenPackageW");
823 res = pMsiOpenPackageW(msi_path, &msiproduct);
829 pMsiGetProductPropertyA = (
void*)
GetProcAddress(hmsi,
"MsiGetProductPropertyA");
831 res = pMsiGetProductPropertyA(msiproduct,
"ProductVersion", versionstringbuf, &
buffer_size);
835 pMsiCloseHandle(msiproduct);
839 TRACE(
"found support msi version %s at %s\n", versionstringbuf,
debugstr_w(msi_path));
858 char versionstringbuf[15];
859 char productcodebuf[39];
866 static const char* mono_upgrade_code =
"{DE624609-C6B5-486A-9274-EF0B854F6BC5}";
872 TRACE(
"not installing mono in wow64 process\n");
876 TRACE(
"searching for mono runtime\n");
880 TRACE(
"mono runtime not found\n");
890 ERR(
"couldn't load msi.dll\n");
894 pMsiEnumRelatedProductsA = (
void*)
GetProcAddress(hmsi,
"MsiEnumRelatedProductsA");
896 res = pMsiEnumRelatedProductsA(mono_upgrade_code, 0, 0, productcodebuf);
900 pMsiGetProductInfoA = (
void*)
GetProcAddress(hmsi,
"MsiGetProductInfoA");
904 res = pMsiGetProductInfoA(productcodebuf,
"VersionString", versionstringbuf, &
buffer_size);
908 ERR(
"MsiEnumRelatedProducts failed, err=%u\n",
res);
913 TRACE(
"found installed support package %s\n", versionstringbuf);
935 TRACE(
"installing support msi\n");
937 pMsiInstallProductW = (
void*)
GetProcAddress(hmsi,
"MsiInstallProductW");
939 res = pMsiInstallProductW(support_msi_path,
NULL);
947 ERR(
"MsiInstallProduct failed, err=%i\n",
res);
std::map< E_STRING, PART_TEST > parts
COMPILER_DEPENDENT_INT64 INT64
static DWORD const fdwReason
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
HRESULT __wine_unregister_resources(HMODULE module)
HRESULT __wine_register_resources(HMODULE module)
const GUID IID_IClassFactory
#define RegCloseKey(hKey)
#define CLR_E_SHIM_RUNTIMEEXPORT
void runtimehost_uninit(void)
HRESULT create_monodata(REFCLSID clsid, LPVOID *ppObj)
void runtimehost_init(void)
HRESULT RuntimeHost_CreateManagedInstance(RuntimeHost *This, LPCWSTR name, MonoDomain *domain, MonoObject **result)
HRESULT RuntimeHost_GetIUnknownForObject(RuntimeHost *This, MonoObject *obj, IUnknown **ppUnk)
static IUnknown **const WCHAR v2_0[]
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
static const WCHAR szDllName[]
#define ERROR_CALL_NOT_IMPLEMENTED
#define DLL_THREAD_DETACH
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
#define GetProcAddress(x, y)
#define GetCurrentProcess()
#define ERROR_NO_MORE_ITEMS
#define WINE_DECLARE_DEBUG_CHANNEL(x)
#define WideCharToMultiByte
static const WCHAR version[]
static const WCHAR culture[]
static DWORD DWORD * dwLength
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
LPVOID WINAPI TlsGetValue(IN DWORD Index)
BOOL WINAPI TlsSetValue(IN DWORD Index, IN LPVOID Value)
BOOL WINAPI TlsFree(IN DWORD Index)
DWORD WINAPI DECLSPEC_HOTPATCH TlsAlloc(void)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl atoi(const char *)
_ACRTIMP char *__cdecl strchr(const char *, int)
_ACRTIMP size_t __cdecl strlen(const char *)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
GLboolean GLboolean GLboolean b
GLuint GLsizei GLsizei * length
GLboolean GLboolean GLboolean GLboolean a
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
static IN DWORD IN LPVOID lpvReserved
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
_In_ BOOL _In_ HANDLE hProcess
#define memcpy(s1, s2, n)
static LPCWSTR LPVOID pvReserved
static LPCWSTR LPVOID HMODULE * phModDll
static PROCESS_INFORMATION pi
@ RUNTIME_INFO_UPGRADE_VERSION
HRESULT(__stdcall * FLockClrVersionCallback)(void)
static BOOL get_support_msi(LPCWSTR mono_path, LPWSTR msi_path)
INT64 WINAPI ND_RI8(const void *ptr, INT offset)
HRESULT WINAPI _CorValidateImage(PVOID *imageBase, LPCWSTR imageName)
static ULONG WINAPI mscorecf_AddRef(IClassFactory *iface)
void WINAPI CoEEShutDownCOM(void)
HRESULT WINAPI LoadStringRC(UINT resId, LPWSTR pBuffer, int iBufLen, int bQuiet)
HRESULT WINAPI CorBindToCurrentRuntime(LPCWSTR filename, REFCLSID rclsid, REFIID riid, LPVOID *ppv)
static mscorecf * impl_from_IClassFactory(IClassFactory *iface)
HRESULT WINAPI DllRegisterServer(void)
HRESULT WINAPI GetAssemblyMDImport(LPCWSTR szFileName, REFIID riid, IUnknown **ppIUnk)
static void parse_msi_version_string(const char *version, int *parts)
VOID WINAPI _CorImageUnloading(PVOID imageBase)
HRESULT WINAPI GetRequestedRuntimeVersion(LPWSTR pExe, LPWSTR pVersion, DWORD cchBuffer, DWORD *dwlength)
void WINAPI ND_WI8(void *ptr, INT offset, INT64 val)
static DWORD print_tls_index
void CDECL mono_log_handler_fn(const char *log_domain, const char *log_level, const char *message, INT fatal, void *user_data)
HRESULT WINAPI CLRCreateInstance(REFCLSID clsid, REFIID riid, LPVOID *ppInterface)
void WINAPI CorExitProcess(int exitCode)
char * WtoA(LPCWSTR wstr)
INT WINAPI ND_RI4(const void *ptr, INT offset)
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
static HRESULT WINAPI mscorecf_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppobj)
HRESULT WINAPI CreateDebuggingInterfaceFromVersion(int nDebugVersion, LPCWSTR version, IUnknown **ppv)
HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWSTR pConfigurationFile, DWORD startupFlags, DWORD runtimeInfoFlags, LPWSTR pDirectory, DWORD dwDirectory, DWORD *dwDirectoryLength, LPWSTR pVersion, DWORD cchBuffer, DWORD *dwlength)
static int compare_versions(const char *a, const char *b)
void WINAPI ND_WU1(void *ptr, INT offset, BYTE val)
static BOOL invoke_appwiz(void)
static ULONG WINAPI mscorecf_Release(IClassFactory *iface)
HRESULT WINAPI CorBindToRuntimeHost(LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor, LPCWSTR pwszHostConfigFile, VOID *pReserved, DWORD startupFlags, REFCLSID rclsid, REFIID riid, LPVOID *ppv)
HRESULT WINAPI CorGetSvc(void *unk)
HRESULT WINAPI CreateInterface(REFCLSID clsid, REFIID riid, LPVOID *ppInterface)
HRESULT WINAPI GetCORVersion(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength)
HRESULT WINAPI DllUnregisterServer(void)
HRESULT WINAPI LoadStringRCEx(LCID culture, UINT resId, LPWSTR pBuffer, int iBufLen, int bQuiet, int *pBufLen)
HRESULT WINAPI CorIsLatestSvc(int *unk1, int *unk2)
HRESULT WINAPI GetCORSystemDirectory(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength)
void CDECL mono_print_handler_fn(const char *string, INT is_stdout)
HRESULT WINAPI GetVersionFromProcess(HANDLE hProcess, LPWSTR pVersion, DWORD cchBuffer, DWORD *dwLength)
__int32 WINAPI _CorExeMain2(PBYTE ptrMemory, DWORD cntMemory, LPWSTR imageName, LPWSTR loaderName, LPWSTR cmdLine)
INT WINAPI ND_RU1(const void *ptr, INT offset)
void WINAPI ND_CopyObjSrc(const void *src, INT offset, void *dst, INT size)
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
HRESULT WINAPI CoInitializeCor(DWORD fFlags)
static BOOL install_wine_mono(void)
BOOLEAN WINAPI StrongNameSignatureVerification(LPCWSTR filename, DWORD inFlags, DWORD *pOutFlags)
static HRESULT WINAPI mscorecf_LockServer(IClassFactory *iface, BOOL dolock)
HRESULT WINAPI GetRealProcAddress(LPCSTR procname, void **ppv)
static BOOL get_install_root(LPWSTR install_dir)
HRESULT WINAPI GetFileVersion(LPCWSTR szFilename, LPWSTR szBuffer, DWORD cchBuffer, DWORD *dwLength)
static HRESULT WINAPI mscorecf_CreateInstance(IClassFactory *iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
BOOLEAN WINAPI StrongNameSignatureVerificationEx(LPCWSTR filename, BOOLEAN forceVerification, BOOLEAN *pVerified)
void WINAPI ND_WI4(void *ptr, INT offset, INT val)
HRESULT WINAPI LockClrVersion(FLockClrVersionCallback hostCallback, FLockClrVersionCallback *pBeginHostSetup, FLockClrVersionCallback *pEndHostSetup)
void WINAPI ND_CopyObjDst(const void *src, void *dst, INT offset, INT size)
HRESULT(* fnCreateInstance)(REFIID riid, LPVOID *ppObj)
BOOLEAN WINAPI StrongNameTokenFromAssembly(LPCWSTR path, BYTE **token, ULONG *size)
HRESULT WINAPI CorBindToRuntimeEx(LPWSTR szVersion, LPWSTR szBuildFlavor, DWORD nflags, REFCLSID rslsid, REFIID riid, LPVOID *ppv)
HRESULT WINAPI LoadLibraryShim(LPCWSTR szDllName, LPCWSTR szVersion, LPVOID pvReserved, HMODULE *phModDll)
INT WINAPI ND_RI2(const void *ptr, INT offset)
void WINAPI ND_WI2(void *ptr, INT offset, SHORT val)
static const struct IClassFactoryVtbl mscorecf_vtbl
STDAPI ClrCreateManagedInstance(LPCWSTR pTypeName, REFIID riid, void **ppObject)
struct _MonoObject MonoObject
#define WINE_MONO_VERSION
#define IsEqualGUID(rguid1, rguid2)
const char int wine_dbg_printf(const char *format,...) __WINE_PRINTF_ATTR(1
wchar_t const *const size_t const buffer_size
IClassFactory IClassFactory_iface
fnCreateInstance pfnCreateInstance
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define CONTAINING_RECORD(address, type, field)
#define TLS_OUT_OF_INDEXES
#define CLASS_E_NOAGGREGATION
#define CLASS_E_CLASSNOTAVAILABLE
void fatal(const char *msg)
#define HKEY_LOCAL_MACHINE