Author: akhaldi Date: Sun Jun 5 19:23:27 2016 New Revision: 71555
URL: http://svn.reactos.org/svn/reactos?rev=71555&view=rev Log: [INETCOMM] Sync with Wine Staging 1.9.11. CORE-11368
Modified: trunk/reactos/dll/win32/inetcomm/inetcomm.spec trunk/reactos/dll/win32/inetcomm/mimeole.c trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/inetcomm/inetcomm.spec URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/inetcomm/inetcomm... ============================================================================== --- trunk/reactos/dll/win32/inetcomm/inetcomm.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/inetcomm/inetcomm.spec [iso-8859-1] Sun Jun 5 19:23:27 2016 @@ -42,7 +42,7 @@ @ stub MimeEditGetBackgroundImageUrl @ stub MimeEditIsSafeToRun @ stub MimeEditViewSource -@ stub MimeGetAddressFormatW +@ stdcall MimeGetAddressFormatW(ptr ptr long long ptr) @ stub MimeOleAlgNameFromSMimeCap @ stub MimeOleAlgStrengthFromSMimeCap @ stub MimeOleClearDirtyTree @@ -79,7 +79,7 @@ @ stdcall MimeOleGetInternat(ptr) @ stub MimeOleGetPropA @ stub MimeOleGetPropW -@ stub MimeOleGetPropertySchema +@ stdcall MimeOleGetPropertySchema(ptr) @ stub MimeOleGetRelatedSection @ stub MimeOleInetDateToFileTime @ stub MimeOleObjectFromMoniker
Modified: trunk/reactos/dll/win32/inetcomm/mimeole.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/inetcomm/mimeole.... ============================================================================== --- trunk/reactos/dll/win32/inetcomm/mimeole.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/inetcomm/mimeole.c [iso-8859-1] Sun Jun 5 19:23:27 2016 @@ -97,6 +97,17 @@ return CONTAINING_RECORD(iface, MimeBody, IMimeBody_iface); }
+typedef struct propschema +{ + IMimePropertySchema IMimePropertySchema_iface; + LONG ref; +} propschema; + +static inline propschema *impl_from_IMimePropertySchema(IMimePropertySchema *iface) +{ + return CONTAINING_RECORD(iface, propschema, IMimePropertySchema_iface); +} + static LPSTR strdupA(LPCSTR str) { char *ret; @@ -185,7 +196,7 @@
for(prop = default_props; prop->name; prop++) { - if(!strcasecmp(*ptr, prop->name)) + if(!lstrcmpiA(*ptr, prop->name)) { TRACE("%s: found match with default property id %d\n", *ptr, prop->id); break; @@ -197,7 +208,7 @@ property_list_entry_t *prop_entry; LIST_FOR_EACH_ENTRY(prop_entry, &body->new_props, property_list_entry_t, entry) { - if(!strcasecmp(*ptr, prop_entry->prop.name)) + if(!lstrcmpiA(*ptr, prop_entry->prop.name)) { TRACE("%s: found match with already added new property id %d\n", *ptr, prop_entry->prop.id); prop = &prop_entry->prop; @@ -467,7 +478,7 @@
LIST_FOR_EACH_ENTRY(header, &body->headers, header_t, entry) { - if(!strcasecmp(name, header->prop->name)) + if(!lstrcmpiA(name, header->prop->name)) { *prop = header; return S_OK; @@ -541,7 +552,8 @@ IMimeBody* iface, CLSID* pClassID) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pClassID); return E_NOTIMPL; }
@@ -549,20 +561,22 @@ static HRESULT WINAPI MimeBody_IsDirty( IMimeBody* iface) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->() stub\n", This); return E_NOTIMPL; }
static HRESULT WINAPI MimeBody_Load(IMimeBody *iface, IStream *pStm) { MimeBody *This = impl_from_IMimeBody(iface); - TRACE("(%p)->(%p)\n", iface, pStm); + TRACE("(%p)->(%p)\n", This, pStm); return parse_headers(This, pStm); }
static HRESULT WINAPI MimeBody_Save(IMimeBody *iface, IStream *pStm, BOOL fClearDirty) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p, %d)\n", This, pStm, fClearDirty); return E_NOTIMPL; }
@@ -570,14 +584,16 @@ IMimeBody* iface, ULARGE_INTEGER* pcbSize) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pcbSize); return E_NOTIMPL; }
static HRESULT WINAPI MimeBody_InitNew( IMimeBody* iface) { - TRACE("%p->()\n", iface); + MimeBody *This = impl_from_IMimeBody(iface); + TRACE("(%p)->()\n", This); return S_OK; }
@@ -586,7 +602,8 @@ LPCSTR pszName, LPMIMEPROPINFO pInfo) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(pszName), pInfo); return E_NOTIMPL; }
@@ -595,7 +612,8 @@ LPCSTR pszName, LPCMIMEPROPINFO pInfo) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(pszName), pInfo); return E_NOTIMPL; }
@@ -606,9 +624,15 @@ LPPROPVARIANT pValue) { MimeBody *This = impl_from_IMimeBody(iface); - TRACE("(%p)->(%s, %d, %p)\n", This, pszName, dwFlags, pValue); - - if(!strcasecmp(pszName, "att:pri-content-type")) + header_t *header; + HRESULT hr; + + TRACE("(%p)->(%s, 0x%x, %p)\n", This, debugstr_a(pszName), dwFlags, pValue); + + if(!pszName || !pValue) + return E_INVALIDARG; + + if(!lstrcmpiA(pszName, "att:pri-content-type")) { PropVariantClear(pValue); pValue->vt = VT_LPSTR; @@ -616,8 +640,13 @@ return S_OK; }
- FIXME("stub!\n"); - return E_FAIL; + hr = find_prop(This, pszName, &header); + if(hr == S_OK) + { + PropVariantCopy(pValue, &header->value); + } + + return hr; }
static HRESULT WINAPI MimeBody_SetProp( @@ -626,8 +655,61 @@ DWORD dwFlags, LPCPROPVARIANT pValue) { - FIXME("stub\n"); - return E_NOTIMPL; + MimeBody *This = impl_from_IMimeBody(iface); + header_t *header; + HRESULT hr; + + TRACE("(%p)->(%s, 0x%x, %p)\n", This, debugstr_a(pszName), dwFlags, pValue); + + if(!pszName || !pValue) + return E_INVALIDARG; + + hr = find_prop(This, pszName, &header); + if(hr != S_OK) + { + property_list_entry_t *prop_entry; + const property_t *prop = NULL; + + LIST_FOR_EACH_ENTRY(prop_entry, &This->new_props, property_list_entry_t, entry) + { + if(!lstrcmpiA(pszName, prop_entry->prop.name)) + { + TRACE("Found match with already added new property id %d\n", prop_entry->prop.id); + prop = &prop_entry->prop; + break; + } + } + + header = HeapAlloc(GetProcessHeap(), 0, sizeof(*header)); + if(!header) + return E_OUTOFMEMORY; + + if(!prop) + { + prop_entry = HeapAlloc(GetProcessHeap(), 0, sizeof(*prop_entry)); + if(!prop_entry) + { + HeapFree(GetProcessHeap(), 0, header); + return E_OUTOFMEMORY; + } + prop_entry->prop.name = strdupA(pszName); + prop_entry->prop.id = This->next_prop_id++; + prop_entry->prop.flags = 0; + prop_entry->prop.default_vt = pValue->vt; + list_add_tail(&This->new_props, &prop_entry->entry); + prop = &prop_entry->prop; + TRACE("Allocating new prop id %d\n", prop_entry->prop.id); + } + + header->prop = prop; + PropVariantInit(&header->value); + list_init(&header->params); + list_add_tail(&This->headers, &header->entry); + } + + PropVariantCopy(&header->value, pValue); + + return S_OK; }
static HRESULT WINAPI MimeBody_AppendProp( @@ -636,7 +718,8 @@ DWORD dwFlags, LPPROPVARIANT pValue) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, 0x%x, %p) stub\n", This, debugstr_a(pszName), dwFlags, pValue); return E_NOTIMPL; }
@@ -644,7 +727,8 @@ IMimeBody* iface, LPCSTR pszName) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s) stub\n", This, debugstr_a(pszName)); return E_NOTIMPL; }
@@ -654,7 +738,8 @@ LPCSTR* prgszName, IMimePropertySet* pPropertySet) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p, %p) stub\n", This, cNames, prgszName, pPropertySet); return E_NOTIMPL; }
@@ -664,7 +749,8 @@ LPCSTR* prgszName, IMimePropertySet* pPropertySet) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p, %p) stub\n", This, cNames, prgszName, pPropertySet); return E_NOTIMPL; }
@@ -673,7 +759,8 @@ ULONG cNames, LPCSTR* prgszName) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p) stub\n", This, cNames, prgszName); return E_NOTIMPL; }
@@ -684,7 +771,8 @@ boolean fSubString, boolean fCaseSensitive) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %s, %d, %d) stub\n", This, debugstr_a(pszName), debugstr_a(pszCriteria), fSubString, fCaseSensitive); return E_NOTIMPL; }
@@ -692,7 +780,8 @@ IMimeBody* iface, LPHCHARSET phCharset) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, phCharset); *phCharset = NULL; return S_OK; } @@ -702,7 +791,8 @@ HCHARSET hCharset, CSETAPPLYTYPE applytype) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p, %d) stub\n", This, hCharset, applytype); return E_NOTIMPL; }
@@ -763,14 +853,14 @@ { const char *pri = This->content_pri_type; if(!pri) pri = "text"; - if(strcasecmp(pri, pszPriType)) return S_FALSE; + if(lstrcmpiA(pri, pszPriType)) return S_FALSE; }
if(pszSubType) { const char *sub = This->content_sub_type; if(!sub) sub = "plain"; - if(strcasecmp(sub, pszSubType)) return S_FALSE; + if(lstrcmpiA(sub, pszSubType)) return S_FALSE; }
return S_OK; @@ -781,7 +871,8 @@ REFIID riid, void** ppvObject) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_guid(riid), ppvObject); return E_NOTIMPL; }
@@ -789,7 +880,8 @@ IMimeBody* iface, IMimePropertySet** ppPropertySet) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, ppPropertySet); return E_NOTIMPL; }
@@ -798,8 +890,9 @@ const TYPEDID oid, LPCPROPVARIANT pValue) { + MimeBody *This = impl_from_IMimeBody(iface); HRESULT hr = E_NOTIMPL; - TRACE("(%p)->(%08x, %p)\n", iface, oid, pValue); + TRACE("(%p)->(%08x, %p)\n", This, oid, pValue);
if(pValue->vt != TYPEDID_TYPE(oid)) { @@ -813,6 +906,10 @@ FIXME("OID_SECURITY_HWND_OWNER (value %08x): ignoring\n", pValue->u.ulVal); hr = S_OK; break; + case OID_TRANSMIT_BODY_ENCODING: + FIXME("OID_TRANSMIT_BODY_ENCODING (value %08x): ignoring\n", pValue->u.ulVal); + hr = S_OK; + break; default: FIXME("Unhandled oid %08x\n", oid); } @@ -825,7 +922,8 @@ const TYPEDID oid, LPPROPVARIANT pValue) { - FIXME("(%p)->(%08x, %p): stub\n", iface, oid, pValue); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%08x, %p): stub\n", This, oid, pValue); return E_NOTIMPL; }
@@ -834,7 +932,8 @@ DWORD dwFlags, IMimeEnumProperties** ppEnum) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(0x%x, %p) stub\n", This, dwFlags, ppEnum); return E_NOTIMPL; }
@@ -844,7 +943,7 @@ { MimeBody *This = impl_from_IMimeBody(iface);
- TRACE("(%p)->(%d)\n", iface, bodytype); + TRACE("(%p)->(%d)\n", This, bodytype); switch(bodytype) { case IBT_EMPTY: @@ -859,7 +958,8 @@ IMimeBody* iface, LPCSTR pszDisplay) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%s) stub\n", This, debugstr_a(pszDisplay)); return E_NOTIMPL; }
@@ -867,7 +967,8 @@ IMimeBody* iface, LPSTR* ppszDisplay) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, ppszDisplay); return E_NOTIMPL; }
@@ -913,7 +1014,8 @@ ENCODINGTYPE ietEncoding, ULONG* pcbSize) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p) stub\n", This, ietEncoding, pcbSize); return E_NOTIMPL; }
@@ -922,7 +1024,8 @@ ENCODINGTYPE ietEncoding, IStream* pStream) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %p) stub\n", This, ietEncoding, pStream); return E_NOTIMPL; }
@@ -977,7 +1080,8 @@ static HRESULT WINAPI MimeBody_EmptyData( IMimeBody* iface) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->() stub\n", This); return E_NOTIMPL; }
@@ -985,7 +1089,8 @@ IMimeBody* iface, IMimeBody* pBody) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pBody); return E_NOTIMPL; }
@@ -993,7 +1098,8 @@ IMimeBody* iface, LPTRANSMITINFO pTransmitInfo) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%p) stub\n", This, pTransmitInfo); return E_NOTIMPL; }
@@ -1002,7 +1108,8 @@ ENCODINGTYPE ietEncoding, LPCSTR pszFilePath) { - FIXME("stub\n"); + MimeBody *This = impl_from_IMimeBody(iface); + FIXME("(%p)->(%d, %s) stub\n", This, ietEncoding, debugstr_a(pszFilePath)); return E_NOTIMPL; }
@@ -1643,7 +1750,7 @@
for(i = 0; i < count; i++) { - if(!strcasecmp(param_info[i].pszName, "boundary")) + if(!lstrcmpiA(param_info[i].pszName, "boundary")) { struct list offset_list; offset_entry_t *cur, *cursor2; @@ -1688,6 +1795,8 @@ return E_FAIL; }
+ empty_body_list(&This->body_tree); + IStream_AddRef(pStm); This->stream = pStm; offsets.cbBoundaryStart = offsets.cbHeaderStart = 0; @@ -2182,27 +2291,38 @@ const TYPEDID oid, LPCPROPVARIANT pValue) { - HRESULT hr = E_NOTIMPL; + HRESULT hr = S_OK; TRACE("(%p)->(%08x, %p)\n", iface, oid, pValue);
+ /* Message ID is checked before type. + * OID 0x4D -> 0x56 and 0x58 aren't defined but will filtered out later. + */ + if(TYPEDID_ID(oid) < TYPEDID_ID(OID_ALLOW_8BIT_HEADER) || TYPEDID_ID(oid) > TYPEDID_ID(OID_SECURITY_2KEY_CERT_BAG_64)) + { + WARN("oid (%08x) out of range\n", oid); + return MIME_E_INVALID_OPTION_ID; + } + if(pValue->vt != TYPEDID_TYPE(oid)) { WARN("Called with vartype %04x and oid %08x\n", pValue->vt, oid); - return E_INVALIDARG; + return S_OK; }
switch(oid) { case OID_HIDE_TNEF_ATTACHMENTS: FIXME("OID_HIDE_TNEF_ATTACHMENTS (value %d): ignoring\n", pValue->u.boolVal); - hr = S_OK; break; case OID_SHOW_MACBINARY: FIXME("OID_SHOW_MACBINARY (value %d): ignoring\n", pValue->u.boolVal); - hr = S_OK; + break; + case OID_SAVEBODY_KEEPBOUNDARY: + FIXME("OID_SAVEBODY_KEEPBOUNDARY (value %d): ignoring\n", pValue->u.boolVal); break; default: FIXME("Unhandled oid %08x\n", oid); + hr = MIME_E_INVALID_OPTION_ID; }
return hr; @@ -2526,6 +2646,8 @@ HRESULT MimeMessage_create(IUnknown *outer, void **obj) { MimeMessage *This; + MimeBody *mime_body; + body_t *root_body;
TRACE("(%p, %p)\n", outer, obj);
@@ -2545,6 +2667,10 @@ This->stream = NULL; list_init(&This->body_tree); This->next_index = 1; + + mime_body = mimebody_create(); + root_body = new_body_entry(mime_body, This->next_index++, NULL); + list_add_head(&This->body_tree, &root_body->entry);
*obj = &This->IMimeMessage_iface; return S_OK; @@ -2976,3 +3102,127 @@
return MimeOleCreateVirtualStream((IStream **)obj); } + +/* IMimePropertySchema Interface */ +static HRESULT WINAPI propschema_QueryInterface(IMimePropertySchema *iface, REFIID riid, void **out) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), out); + + *out = NULL; + + if (IsEqualIID(riid, &IID_IUnknown) || + IsEqualIID(riid, &IID_IMimePropertySchema)) + { + *out = iface; + } + else + { + FIXME("no interface for %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + IMimePropertySchema_AddRef(iface); + return S_OK; +} + +static ULONG WINAPI propschema_AddRef(IMimePropertySchema *iface) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI propschema_Release(IMimePropertySchema *iface) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if (!ref) + { + HeapFree(GetProcessHeap(), 0, This); + } + + return ref; +} + +static HRESULT WINAPI propschema_RegisterProperty(IMimePropertySchema *iface, const char *name, DWORD flags, + DWORD rownumber, VARTYPE vtdefault, DWORD *propid) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %x, %d, %d, %p) stub\n", This, debugstr_a(name), flags, rownumber, vtdefault, propid); + return E_NOTIMPL; +} + +static HRESULT WINAPI propschema_ModifyProperty(IMimePropertySchema *iface, const char *name, DWORD flags, + DWORD rownumber, VARTYPE vtdefault) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %x, %d, %d) stub\n", This, debugstr_a(name), flags, rownumber, vtdefault); + return S_OK; +} + +static HRESULT WINAPI propschema_GetPropertyId(IMimePropertySchema *iface, const char *name, DWORD *propid) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(name), propid); + return E_NOTIMPL; +} + +static HRESULT WINAPI propschema_GetPropertyName(IMimePropertySchema *iface, DWORD propid, char **name) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%d, %p) stub\n", This, propid, name); + return E_NOTIMPL; +} + +static HRESULT WINAPI propschema_RegisterAddressType(IMimePropertySchema *iface, const char *name, DWORD *adrtype) +{ + propschema *This = impl_from_IMimePropertySchema(iface); + FIXME("(%p)->(%s, %p) stub\n", This, debugstr_a(name), adrtype); + return E_NOTIMPL; +} + +static IMimePropertySchemaVtbl prop_schema_vtbl = +{ + propschema_QueryInterface, + propschema_AddRef, + propschema_Release, + propschema_RegisterProperty, + propschema_ModifyProperty, + propschema_GetPropertyId, + propschema_GetPropertyName, + propschema_RegisterAddressType +}; + + +HRESULT WINAPI MimeOleGetPropertySchema(IMimePropertySchema **schema) +{ + propschema *This; + + TRACE("(%p) stub\n", schema); + + This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); + if (!This) + return E_OUTOFMEMORY; + + This->IMimePropertySchema_iface.lpVtbl = &prop_schema_vtbl; + This->ref = 1; + + *schema = &This->IMimePropertySchema_iface; + + return S_OK; +} + +HRESULT WINAPI MimeGetAddressFormatW(REFIID riid, void *object, DWORD addr_type, + ADDRESSFORMAT addr_format, WCHAR **address) +{ + FIXME("(%s, %p, %d, %d, %p) stub\n", debugstr_guid(riid), object, addr_type, addr_format, address); + + return E_NOTIMPL; +}
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=7... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sun Jun 5 19:23:27 2016 @@ -78,7 +78,7 @@ reactos/dll/win32/imaadp32.acm # Synced to WineStaging-1.9.11 reactos/dll/win32/imagehlp # Synced to WineStaging-1.9.4 reactos/dll/win32/imm32 # Synced to Wine-1.7.27 -reactos/dll/win32/inetcomm # Synced to WineStaging-1.9.4 +reactos/dll/win32/inetcomm # Synced to WineStaging-1.9.11 reactos/dll/win32/inetmib1 # Synced to WineStaging-1.9.4 reactos/dll/win32/initpki # Synced to WineStaging-1.9.4 reactos/dll/win32/inseng # Synced to WineStaging-1.9.4