25#define WIN32_NO_STATUS
29#define NONAMELESSUNION
30#define NONAMELESSSTRUCT
78 IAssemblyEnum_AddRef(iface);
79 *ppobj = &
This->IAssemblyEnum_iface;
92 TRACE(
"(%p)->(ref before = %u)\n",
This, refCount - 1);
103 TRACE(
"(%p)->(ref before = %u)\n",
This, refCount + 1);
112 IAssemblyName_Release(asmname->
name);
139 *ppName = asmname->
name;
140 IAssemblyName_AddRef(*ppName);
151 TRACE(
"(%p)\n", iface);
160 FIXME(
"(%p, %p) stub!\n", iface, ppEnum);
177 static const WCHAR ss_fmt[] = {
'%',
's',
'\\',
'%',
's',0};
178 static const WCHAR sss_fmt[] = {
'%',
's',
'\\',
'%',
's',
'_',
'_',
'%',
's',0};
179 static const WCHAR ssss_fmt[] = {
'%',
's',
'\\',
'%',
's',
'%',
's',
'_',
'_',
'%',
's',0};
180 static const WCHAR ver_fmt[] = {
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',
'.',
'%',
'u',0};
181 static const WCHAR star_fmt[] = {
'%',
's',
'\\',
'*',0};
182 static const WCHAR star_prefix_fmt[] = {
'%',
's',
'\\',
'%',
's',
'*',0};
186 DWORD size, major_size, minor_size, build_size, revision_size;
203 hr = IAssemblyName_GetName(
name, &
size, disp);
211 major_size =
sizeof(
major);
212 IAssemblyName_GetProperty(
name, ASM_NAME_MAJOR_VERSION, &
major, &major_size);
214 minor_size =
sizeof(
minor);
215 IAssemblyName_GetProperty(
name, ASM_NAME_MINOR_VERSION, &
minor, &minor_size);
217 build_size =
sizeof(build);
218 IAssemblyName_GetProperty(
name, ASM_NAME_BUILD_NUMBER, &build, &build_size);
220 revision_size =
sizeof(revision);
221 IAssemblyName_GetProperty(
name, ASM_NAME_REVISION_NUMBER, &revision, &revision_size);
223 if (!major_size || !minor_size || !build_size || !revision_size) verptr =
star;
231 IAssemblyName_GetProperty(
name, ASM_NAME_PUBLIC_KEY_TOKEN,
token, &
size);
237 pubkeyptr = token_str;
250 WORD version1, version2;
257 IAssemblyName_GetProperty(asmname1->
name, ASM_NAME_NAME,
name1, &
size);
259 IAssemblyName_GetProperty(asmname2->
name, ASM_NAME_NAME,
name2, &
size);
263 for (
i = ASM_NAME_MAJOR_VERSION;
i < ASM_NAME_CULTURE;
i++)
265 size =
sizeof(version1);
266 IAssemblyName_GetProperty(asmname1->
name,
i, &version1, &
size);
267 size =
sizeof(version2);
268 IAssemblyName_GetProperty(asmname2->
name,
i, &version2, &
size);
270 if (version1 < version2)
return -1;
271 if (version1 > version2)
return 1;
276 size =
sizeof(token1);
277 IAssemblyName_GetProperty(asmname1->
name, ASM_NAME_PUBLIC_KEY_TOKEN, token1, &
size);
278 size =
sizeof(token2);
279 IAssemblyName_GetProperty(asmname2->
name, ASM_NAME_PUBLIC_KEY_TOKEN, token2, &
size);
310 static const WCHAR dot[] = {
'.',0};
311 static const WCHAR dotdot[] = {
'.',
'.',0};
312 static const WCHAR dblunder[] = {
'_',
'_',0};
313 static const WCHAR path_fmt[] = {
'%',
's',
'\\',
'%',
's',
'\\',
'%',
's',
'.',
'd',
'l',
'l',0};
314 static const WCHAR name_fmt[] = {
'%',
's',
',',
' ',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'=',
'%',
's',
',',
' ',
315 'C',
'u',
'l',
't',
'u',
'r',
'e',
'=',
'n',
'e',
'u',
't',
'r',
'a',
'l',
',',
' ',
316 'P',
'u',
'b',
'l',
'i',
'c',
'K',
'e',
'y',
'T',
'o',
'k',
'e',
'n',
'=',
'%',
's',0};
317 static const WCHAR ss_fmt[] = {
'%',
's',
'\\',
'%',
's',0};
356 if (
lstrlenW(ffd.cFileName) >= prefix_len &&
362 if (!(asmname =
heap_alloc(
sizeof(*asmname))))
379 IAssemblyName_Release(asmname->
name);
400 static const WCHAR gac[] = {
'\\',
'G',
'A',
'C',0};
401 static const WCHAR gac_32[] = {
'\\',
'G',
'A',
'C',
'_',
'3',
'2',0};
402 static const WCHAR gac_64[] = {
'\\',
'G',
'A',
'C',
'_',
'6',
'4',0};
403 static const WCHAR gac_msil[] = {
'\\',
'G',
'A',
'C',
'_',
'M',
'S',
'I',
'L',0};
404 static const WCHAR v40[] = {
'v',
'4',
'.',
'0',
'_',0};
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
#define INVALID_HANDLE_VALUE
static const WCHAR version[]
HRESULT IAssemblyName_SetPath(IAssemblyName *iface, LPCWSTR path)
HRESULT WINAPI CreateAssemblyNameObject(IAssemblyName **ppAssemblyNameObj, LPCWSTR szAssemblyName, DWORD dwFlags, LPVOID pvReserved)
HRESULT WINAPI GetCachePath(ASM_CACHE_FLAGS dwCacheFlags, LPWSTR pwzCachePath, PDWORD pcchPath)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
VOID WINAPI GetNativeSystemInfo(IN LPSYSTEM_INFO lpSystemInfo)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
static void token_to_str(BYTE *bytes, LPWSTR str)
GLint GLint GLsizei GLsizei GLsizei depth
GLenum GLuint GLenum GLsizei const GLchar * buf
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
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
static LPCSTR DWORD void * pvReserved
#define PROCESSOR_ARCHITECTURE_AMD64
#define IsEqualIID(riid1, riid2)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
__WINE_SERVER_LIST_INLINE struct list * list_next(const struct list *list, const struct list *elem)
#define LIST_FOR_EACH(cursor, list)
__WINE_SERVER_LIST_INLINE void list_add_before(struct list *elem, struct list *to_add)
#define LIST_FOR_EACH_SAFE(cursor, cursor2, list)
IAssemblyEnum IAssemblyEnum_iface
Character const *const prefix
#define CONTAINING_RECORD(address, type, field)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
@ CANOF_PARSE_DISPLAY_NAME