mirror of
https://github.com/reactos/reactos.git
synced 2025-01-03 21:09:19 +00:00
[OLE32]
* Sync with Wine 1.5.26. svn path=/trunk/; revision=58586
This commit is contained in:
parent
43fd991656
commit
5d0dc7b588
10 changed files with 173 additions and 173 deletions
|
@ -818,14 +818,17 @@ static void apartment_freeunusedlibraries(struct apartment *apt, DWORD delay)
|
|||
real_delay = 0;
|
||||
}
|
||||
|
||||
if (!real_delay || (entry->unload_time && (entry->unload_time < GetTickCount())))
|
||||
if (!real_delay || (entry->unload_time && ((int)(GetTickCount() - entry->unload_time) > 0)))
|
||||
{
|
||||
list_remove(&entry->entry);
|
||||
COMPOBJ_DllList_ReleaseRef(entry->dll, TRUE);
|
||||
HeapFree(GetProcessHeap(), 0, entry);
|
||||
}
|
||||
else
|
||||
{
|
||||
entry->unload_time = GetTickCount() + real_delay;
|
||||
if (!entry->unload_time) entry->unload_time = 1;
|
||||
}
|
||||
}
|
||||
else if (entry->unload_time)
|
||||
entry->unload_time = 0;
|
||||
|
@ -2035,8 +2038,11 @@ HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *ppszProgID)
|
|||
*ppszProgID = CoTaskMemAlloc(progidlen * sizeof(WCHAR));
|
||||
if (*ppszProgID)
|
||||
{
|
||||
if (RegQueryValueW(hkey, NULL, *ppszProgID, &progidlen))
|
||||
if (RegQueryValueW(hkey, NULL, *ppszProgID, &progidlen)) {
|
||||
ret = REGDB_E_CLASSNOTREG;
|
||||
CoTaskMemFree(*ppszProgID);
|
||||
*ppszProgID = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = E_OUTOFMEMORY;
|
||||
|
@ -2732,83 +2738,82 @@ HRESULT WINAPI CoResumeClassObjects(void)
|
|||
* CoGetClassObject()
|
||||
*/
|
||||
HRESULT WINAPI CoCreateInstance(
|
||||
REFCLSID rclsid,
|
||||
LPUNKNOWN pUnkOuter,
|
||||
DWORD dwClsContext,
|
||||
REFIID iid,
|
||||
LPVOID *ppv)
|
||||
REFCLSID rclsid,
|
||||
LPUNKNOWN pUnkOuter,
|
||||
DWORD dwClsContext,
|
||||
REFIID iid,
|
||||
LPVOID *ppv)
|
||||
{
|
||||
HRESULT hres;
|
||||
LPCLASSFACTORY lpclf = 0;
|
||||
APARTMENT *apt;
|
||||
HRESULT hres;
|
||||
LPCLASSFACTORY lpclf = 0;
|
||||
APARTMENT *apt;
|
||||
|
||||
TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid),
|
||||
pUnkOuter, dwClsContext, debugstr_guid(iid), ppv);
|
||||
TRACE("(rclsid=%s, pUnkOuter=%p, dwClsContext=%08x, riid=%s, ppv=%p)\n", debugstr_guid(rclsid),
|
||||
pUnkOuter, dwClsContext, debugstr_guid(iid), ppv);
|
||||
|
||||
/*
|
||||
* Sanity check
|
||||
*/
|
||||
if (ppv==0)
|
||||
return E_POINTER;
|
||||
if (ppv==0)
|
||||
return E_POINTER;
|
||||
|
||||
/*
|
||||
* Initialize the "out" parameter
|
||||
*/
|
||||
*ppv = 0;
|
||||
*ppv = 0;
|
||||
|
||||
if (!(apt = COM_CurrentApt()))
|
||||
{
|
||||
if (!(apt = apartment_find_multi_threaded()))
|
||||
if (!(apt = COM_CurrentApt()))
|
||||
{
|
||||
ERR("apartment not initialised\n");
|
||||
return CO_E_NOTINITIALIZED;
|
||||
}
|
||||
apartment_release(apt);
|
||||
}
|
||||
|
||||
/*
|
||||
* The Standard Global Interface Table (GIT) object is a process-wide singleton.
|
||||
* Rather than create a class factory, we can just check for it here
|
||||
*/
|
||||
if (IsEqualIID(rclsid, &CLSID_StdGlobalInterfaceTable)) {
|
||||
if (StdGlobalInterfaceTableInstance == NULL)
|
||||
StdGlobalInterfaceTableInstance = StdGlobalInterfaceTable_Construct();
|
||||
hres = IGlobalInterfaceTable_QueryInterface( (IGlobalInterfaceTable*) StdGlobalInterfaceTableInstance, iid, ppv);
|
||||
if (hres) return hres;
|
||||
|
||||
TRACE("Retrieved GIT (%p)\n", *ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent))
|
||||
return ManualResetEvent_Construct(pUnkOuter, iid, ppv);
|
||||
|
||||
/*
|
||||
* Get a class factory to construct the object we want.
|
||||
*/
|
||||
hres = CoGetClassObject(rclsid,
|
||||
dwClsContext,
|
||||
NULL,
|
||||
&IID_IClassFactory,
|
||||
(LPVOID)&lpclf);
|
||||
|
||||
if (FAILED(hres))
|
||||
return hres;
|
||||
|
||||
/*
|
||||
* Create the object and don't forget to release the factory
|
||||
*/
|
||||
hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
|
||||
IClassFactory_Release(lpclf);
|
||||
if(FAILED(hres))
|
||||
if (!(apt = apartment_find_multi_threaded()))
|
||||
{
|
||||
if (hres == CLASS_E_NOAGGREGATION && pUnkOuter)
|
||||
FIXME("Class %s does not support aggregation\n", debugstr_guid(rclsid));
|
||||
else
|
||||
FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n", debugstr_guid(iid), debugstr_guid(rclsid),hres);
|
||||
ERR("apartment not initialised\n");
|
||||
return CO_E_NOTINITIALIZED;
|
||||
}
|
||||
apartment_release(apt);
|
||||
}
|
||||
|
||||
return hres;
|
||||
/*
|
||||
* The Standard Global Interface Table (GIT) object is a process-wide singleton.
|
||||
* Rather than create a class factory, we can just check for it here
|
||||
*/
|
||||
if (IsEqualIID(rclsid, &CLSID_StdGlobalInterfaceTable))
|
||||
{
|
||||
if (StdGlobalInterfaceTableInstance == NULL)
|
||||
StdGlobalInterfaceTableInstance = StdGlobalInterfaceTable_Construct();
|
||||
hres = IGlobalInterfaceTable_QueryInterface((IGlobalInterfaceTable*)StdGlobalInterfaceTableInstance,
|
||||
iid,
|
||||
ppv);
|
||||
if (hres) return hres;
|
||||
|
||||
TRACE("Retrieved GIT (%p)\n", *ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (IsEqualCLSID(rclsid, &CLSID_ManualResetEvent))
|
||||
return ManualResetEvent_Construct(pUnkOuter, iid, ppv);
|
||||
|
||||
/*
|
||||
* Get a class factory to construct the object we want.
|
||||
*/
|
||||
hres = CoGetClassObject(rclsid,
|
||||
dwClsContext,
|
||||
NULL,
|
||||
&IID_IClassFactory,
|
||||
(LPVOID)&lpclf);
|
||||
|
||||
if (FAILED(hres))
|
||||
return hres;
|
||||
|
||||
/*
|
||||
* Create the object and don't forget to release the factory
|
||||
*/
|
||||
hres = IClassFactory_CreateInstance(lpclf, pUnkOuter, iid, ppv);
|
||||
IClassFactory_Release(lpclf);
|
||||
if (FAILED(hres))
|
||||
{
|
||||
if (hres == CLASS_E_NOAGGREGATION && pUnkOuter)
|
||||
FIXME("Class %s does not support aggregation\n", debugstr_guid(rclsid));
|
||||
else
|
||||
FIXME("no instance created for interface %s of class %s, hres is 0x%08x\n",
|
||||
debugstr_guid(iid),
|
||||
debugstr_guid(rclsid),hres);
|
||||
}
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -3876,6 +3881,7 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout,
|
|||
if (res == WAIT_OBJECT_0 + cHandles) /* messages available */
|
||||
{
|
||||
MSG msg;
|
||||
int count = 0;
|
||||
|
||||
/* call message filter */
|
||||
|
||||
|
@ -3905,7 +3911,9 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout,
|
|||
}
|
||||
}
|
||||
|
||||
while (COM_PeekMessage(apt, &msg))
|
||||
/* some apps (e.g. Visio 2010) don't handle WM_PAINT properly and loop forever,
|
||||
* so after processing 100 messages we go back to checking the wait handles */
|
||||
while (count++ < 100 && COM_PeekMessage(apt, &msg))
|
||||
{
|
||||
TRACE("received message whilst waiting for RPC: 0x%04x\n", msg.message);
|
||||
TranslateMessage(&msg);
|
||||
|
|
|
@ -1641,10 +1641,10 @@ static const IEnumMonikerVtbl VT_EnumMonikerImpl =
|
|||
******************************************************************************/
|
||||
static HRESULT
|
||||
EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, ULONG tabSize,
|
||||
ULONG currentPos, BOOL leftToRigth, IEnumMoniker ** ppmk)
|
||||
ULONG currentPos, BOOL leftToRight, IEnumMoniker ** ppmk)
|
||||
{
|
||||
EnumMonikerImpl* newEnumMoniker;
|
||||
int i;
|
||||
ULONG i;
|
||||
|
||||
if (currentPos > tabSize)
|
||||
return E_INVALIDARG;
|
||||
|
@ -1668,17 +1668,17 @@ EnumMonikerImpl_CreateEnumMoniker(IMoniker** tabMoniker, ULONG tabSize,
|
|||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
if (leftToRigth)
|
||||
if (leftToRight)
|
||||
for (i=0;i<tabSize;i++){
|
||||
|
||||
newEnumMoniker->tabMoniker[i]=tabMoniker[i];
|
||||
IMoniker_AddRef(tabMoniker[i]);
|
||||
}
|
||||
else
|
||||
for (i=tabSize-1;i>=0;i--){
|
||||
for (i = tabSize; i > 0; i--){
|
||||
|
||||
newEnumMoniker->tabMoniker[tabSize-i-1]=tabMoniker[i];
|
||||
IMoniker_AddRef(tabMoniker[i]);
|
||||
newEnumMoniker->tabMoniker[tabSize-i]=tabMoniker[i - 1];
|
||||
IMoniker_AddRef(tabMoniker[i - 1]);
|
||||
}
|
||||
|
||||
*ppmk=&newEnumMoniker->IEnumMoniker_iface;
|
||||
|
|
|
@ -1325,7 +1325,7 @@ static HRESULT WINAPI DefaultHandler_Run(
|
|||
|
||||
release_delegates(This);
|
||||
|
||||
hr = CoCreateInstance(&This->clsid, NULL, CLSCTX_ALL,
|
||||
hr = CoCreateInstance(&This->clsid, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
|
||||
&IID_IOleObject, (void **)&This->pOleDelegate);
|
||||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
|
|
@ -149,7 +149,7 @@ static BOOL start_rpcss(void)
|
|||
strcatW( cmd, rpcss );
|
||||
|
||||
Wow64DisableWow64FsRedirection( &redir );
|
||||
rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
|
||||
rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi );
|
||||
Wow64RevertWow64FsRedirection( redir );
|
||||
|
||||
if (rslt)
|
||||
|
|
|
@ -1880,11 +1880,11 @@ HOLEMENU WINAPI OleCreateMenuDescriptor(
|
|||
* Destroy the shared menu descriptor
|
||||
*/
|
||||
HRESULT WINAPI OleDestroyMenuDescriptor(
|
||||
HOLEMENU hmenuDescriptor)
|
||||
HOLEMENU hmenuDescriptor)
|
||||
{
|
||||
if ( hmenuDescriptor )
|
||||
GlobalFree( hmenuDescriptor );
|
||||
return S_OK;
|
||||
if ( hmenuDescriptor )
|
||||
GlobalFree( hmenuDescriptor );
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -1908,72 +1908,73 @@ HRESULT WINAPI OleDestroyMenuDescriptor(
|
|||
* these are non null.
|
||||
*/
|
||||
HRESULT WINAPI OleSetMenuDescriptor(
|
||||
HOLEMENU hOleMenu,
|
||||
HWND hwndFrame,
|
||||
HWND hwndActiveObject,
|
||||
LPOLEINPLACEFRAME lpFrame,
|
||||
LPOLEINPLACEACTIVEOBJECT lpActiveObject)
|
||||
HOLEMENU hOleMenu,
|
||||
HWND hwndFrame,
|
||||
HWND hwndActiveObject,
|
||||
LPOLEINPLACEFRAME lpFrame,
|
||||
LPOLEINPLACEACTIVEOBJECT lpActiveObject)
|
||||
{
|
||||
OleMenuDescriptor *pOleMenuDescriptor = NULL;
|
||||
OleMenuDescriptor *pOleMenuDescriptor = NULL;
|
||||
|
||||
/* Check args */
|
||||
if ( !hwndFrame || (hOleMenu && !hwndActiveObject) )
|
||||
return E_INVALIDARG;
|
||||
/* Check args */
|
||||
if ( !hwndFrame || (hOleMenu && !hwndActiveObject) )
|
||||
return E_INVALIDARG;
|
||||
|
||||
if ( lpFrame || lpActiveObject )
|
||||
{
|
||||
FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n",
|
||||
hOleMenu,
|
||||
hwndFrame,
|
||||
hwndActiveObject,
|
||||
lpFrame,
|
||||
lpActiveObject);
|
||||
}
|
||||
if ( lpFrame || lpActiveObject )
|
||||
{
|
||||
FIXME("(%p, %p, %p, %p, %p), Context sensitive help filtering not implemented!\n",
|
||||
hOleMenu,
|
||||
hwndFrame,
|
||||
hwndActiveObject,
|
||||
lpFrame,
|
||||
lpActiveObject);
|
||||
}
|
||||
|
||||
/* Set up a message hook to intercept the containers frame window messages.
|
||||
* The message filter is responsible for dispatching menu messages from the
|
||||
* shared menu which are intended for the object.
|
||||
*/
|
||||
/* Set up a message hook to intercept the containers frame window messages.
|
||||
* The message filter is responsible for dispatching menu messages from the
|
||||
* shared menu which are intended for the object.
|
||||
*/
|
||||
|
||||
if ( hOleMenu ) /* Want to install dispatching code */
|
||||
{
|
||||
/* If OLEMenu hooks are already installed for this thread, fail
|
||||
* Note: This effectively means that OleSetMenuDescriptor cannot
|
||||
* be called twice in succession on the same frame window
|
||||
* without first calling it with a null hOleMenu to uninstall */
|
||||
if ( OLEMenu_IsHookInstalled( GetCurrentThreadId() ) )
|
||||
return E_FAIL;
|
||||
if ( hOleMenu ) /* Want to install dispatching code */
|
||||
{
|
||||
/* If OLEMenu hooks are already installed for this thread, fail
|
||||
* Note: This effectively means that OleSetMenuDescriptor cannot
|
||||
* be called twice in succession on the same frame window
|
||||
* without first calling it with a null hOleMenu to uninstall
|
||||
*/
|
||||
if ( OLEMenu_IsHookInstalled( GetCurrentThreadId() ) )
|
||||
return E_FAIL;
|
||||
|
||||
/* Get the menu descriptor */
|
||||
pOleMenuDescriptor = GlobalLock( hOleMenu );
|
||||
if ( !pOleMenuDescriptor )
|
||||
return E_UNEXPECTED;
|
||||
/* Get the menu descriptor */
|
||||
pOleMenuDescriptor = GlobalLock( hOleMenu );
|
||||
if ( !pOleMenuDescriptor )
|
||||
return E_UNEXPECTED;
|
||||
|
||||
/* Update the menu descriptor */
|
||||
pOleMenuDescriptor->hwndFrame = hwndFrame;
|
||||
pOleMenuDescriptor->hwndActiveObject = hwndActiveObject;
|
||||
/* Update the menu descriptor */
|
||||
pOleMenuDescriptor->hwndFrame = hwndFrame;
|
||||
pOleMenuDescriptor->hwndActiveObject = hwndActiveObject;
|
||||
|
||||
GlobalUnlock( hOleMenu );
|
||||
pOleMenuDescriptor = NULL;
|
||||
GlobalUnlock( hOleMenu );
|
||||
pOleMenuDescriptor = NULL;
|
||||
|
||||
/* Add a menu descriptor windows property to the frame window */
|
||||
SetPropW( hwndFrame, prop_olemenuW, hOleMenu );
|
||||
/* Add a menu descriptor windows property to the frame window */
|
||||
SetPropW( hwndFrame, prop_olemenuW, hOleMenu );
|
||||
|
||||
/* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */
|
||||
if ( !OLEMenu_InstallHooks( GetCurrentThreadId() ) )
|
||||
return E_FAIL;
|
||||
}
|
||||
else /* Want to uninstall dispatching code */
|
||||
{
|
||||
/* Uninstall the hooks */
|
||||
if ( !OLEMenu_UnInstallHooks( GetCurrentThreadId() ) )
|
||||
return E_FAIL;
|
||||
/* Install thread scope message hooks for WH_GETMESSAGE and WH_CALLWNDPROC */
|
||||
if ( !OLEMenu_InstallHooks( GetCurrentThreadId() ) )
|
||||
return E_FAIL;
|
||||
}
|
||||
else /* Want to uninstall dispatching code */
|
||||
{
|
||||
/* Uninstall the hooks */
|
||||
if ( !OLEMenu_UnInstallHooks( GetCurrentThreadId() ) )
|
||||
return E_FAIL;
|
||||
|
||||
/* Remove the menu descriptor property from the frame window */
|
||||
RemovePropW( hwndFrame, prop_olemenuW );
|
||||
}
|
||||
/* Remove the menu descriptor property from the frame window */
|
||||
RemovePropW( hwndFrame, prop_olemenuW );
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
|
|
@ -632,7 +632,7 @@ static HRESULT WINAPI PointerMonikerCF_CreateInstance(LPCLASSFACTORY iface,
|
|||
if (FAILED(hr))
|
||||
return hr;
|
||||
|
||||
hr = IMoniker_QueryInterface(pMoniker, riid, ppv);
|
||||
hr = IMoniker_QueryInterface(pMoniker, riid, ppv);
|
||||
|
||||
if (FAILED(hr))
|
||||
IMoniker_Release(pMoniker);
|
||||
|
|
|
@ -1683,7 +1683,7 @@ static HRESULT create_server(REFCLSID rclsid, HANDLE *process)
|
|||
|
||||
/* FIXME: Win2003 supports a ServerExecutable value that is passed into
|
||||
* CreateProcess */
|
||||
if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)) {
|
||||
if (!CreateProcessW(NULL, command, NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo)) {
|
||||
WARN("failed to run local server %s\n", debugstr_w(command));
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
|
@ -1880,7 +1880,7 @@ struct local_server_params
|
|||
{
|
||||
CLSID clsid;
|
||||
IStream *stream;
|
||||
HANDLE ready_event;
|
||||
HANDLE pipe;
|
||||
HANDLE stop_event;
|
||||
HANDLE thread;
|
||||
BOOL multi_use;
|
||||
|
@ -1901,7 +1901,7 @@ static DWORD WINAPI local_server_thread(LPVOID param)
|
|||
ULONG res;
|
||||
BOOL multi_use = lsp->multi_use;
|
||||
OVERLAPPED ovl;
|
||||
HANDLE pipe_event, hPipe, new_pipe;
|
||||
HANDLE pipe_event, hPipe = lsp->pipe, new_pipe;
|
||||
DWORD bytes;
|
||||
|
||||
TRACE("Starting threader for %s.\n",debugstr_guid(&lsp->clsid));
|
||||
|
@ -1910,18 +1910,6 @@ static DWORD WINAPI local_server_thread(LPVOID param)
|
|||
get_localserver_pipe_name(pipefn, &lsp->clsid);
|
||||
ovl.hEvent = pipe_event = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||
|
||||
hPipe = CreateNamedPipeW( pipefn, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
|
||||
PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
|
||||
4096, 4096, 500 /* 0.5 second timeout */, NULL );
|
||||
if (hPipe == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
FIXME("pipe creation failed for %s, le is %u\n", debugstr_w(pipefn), GetLastError());
|
||||
CloseHandle(pipe_event);
|
||||
return 1;
|
||||
}
|
||||
|
||||
SetEvent(lsp->ready_event);
|
||||
|
||||
while (1) {
|
||||
if (!ConnectNamedPipe(hPipe, &ovl))
|
||||
{
|
||||
|
@ -2011,8 +1999,9 @@ static DWORD WINAPI local_server_thread(LPVOID param)
|
|||
/* starts listening for a local server */
|
||||
HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, void **registration)
|
||||
{
|
||||
DWORD tid;
|
||||
DWORD tid, err;
|
||||
struct local_server_params *lsp;
|
||||
WCHAR pipefn[100];
|
||||
|
||||
lsp = HeapAlloc(GetProcessHeap(), 0, sizeof(*lsp));
|
||||
if (!lsp)
|
||||
|
@ -2021,34 +2010,36 @@ HRESULT RPC_StartLocalServer(REFCLSID clsid, IStream *stream, BOOL multi_use, vo
|
|||
lsp->clsid = *clsid;
|
||||
lsp->stream = stream;
|
||||
IStream_AddRef(stream);
|
||||
lsp->ready_event = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||
if (!lsp->ready_event)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, lsp);
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
lsp->stop_event = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||
if (!lsp->stop_event)
|
||||
{
|
||||
CloseHandle(lsp->ready_event);
|
||||
HeapFree(GetProcessHeap(), 0, lsp);
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
lsp->multi_use = multi_use;
|
||||
|
||||
get_localserver_pipe_name(pipefn, &lsp->clsid);
|
||||
lsp->pipe = CreateNamedPipeW(pipefn, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
|
||||
PIPE_TYPE_BYTE|PIPE_WAIT, PIPE_UNLIMITED_INSTANCES,
|
||||
4096, 4096, 500 /* 0.5 second timeout */, NULL);
|
||||
if (lsp->pipe == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
err = GetLastError();
|
||||
FIXME("pipe creation failed for %s, le is %u\n", debugstr_w(pipefn), GetLastError());
|
||||
CloseHandle(lsp->stop_event);
|
||||
HeapFree(GetProcessHeap(), 0, lsp);
|
||||
return HRESULT_FROM_WIN32(err);
|
||||
}
|
||||
|
||||
lsp->thread = CreateThread(NULL, 0, local_server_thread, lsp, 0, &tid);
|
||||
if (!lsp->thread)
|
||||
{
|
||||
CloseHandle(lsp->ready_event);
|
||||
CloseHandle(lsp->pipe);
|
||||
CloseHandle(lsp->stop_event);
|
||||
HeapFree(GetProcessHeap(), 0, lsp);
|
||||
return HRESULT_FROM_WIN32(GetLastError());
|
||||
}
|
||||
|
||||
WaitForSingleObject(lsp->ready_event, INFINITE);
|
||||
CloseHandle(lsp->ready_event);
|
||||
lsp->ready_event = NULL;
|
||||
|
||||
*registration = lsp;
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -1767,7 +1767,7 @@ static HRESULT WINAPI StorageBaseImpl_CopyTo(
|
|||
StorageBaseImpl *This = impl_from_IStorage(iface);
|
||||
|
||||
BOOL skip_storage = FALSE, skip_stream = FALSE;
|
||||
int i;
|
||||
DWORD i;
|
||||
|
||||
TRACE("(%p, %d, %p, %p, %p)\n",
|
||||
iface, ciidExclude, rgiidExclude,
|
||||
|
@ -2822,7 +2822,7 @@ static HRESULT StorageImpl_Construct(
|
|||
{
|
||||
ULONG current_block = This->extBigBlockDepotStart;
|
||||
ULONG cache_size = This->extBigBlockDepotCount * 2;
|
||||
int i;
|
||||
ULONG i;
|
||||
|
||||
This->extBigBlockDepotLocations = HeapAlloc(GetProcessHeap(), 0, sizeof(ULONG) * cache_size);
|
||||
if (!This->extBigBlockDepotLocations)
|
||||
|
|
|
@ -2360,8 +2360,8 @@ HRESULT CALLBACK IMoniker_BindToStorage_Proxy(
|
|||
REFIID riid,
|
||||
void **ppvObj)
|
||||
{
|
||||
FIXME(":stub\n");
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj);
|
||||
return IMoniker_RemoteBindToStorage_Proxy(This, pbc, pmkToLeft, riid, (IUnknown**)ppvObj);
|
||||
}
|
||||
|
||||
HRESULT __RPC_STUB IMoniker_BindToStorage_Stub(
|
||||
|
@ -2371,8 +2371,8 @@ HRESULT __RPC_STUB IMoniker_BindToStorage_Stub(
|
|||
REFIID riid,
|
||||
IUnknown **ppvObj)
|
||||
{
|
||||
FIXME(":stub\n");
|
||||
return E_NOTIMPL;
|
||||
TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObj);
|
||||
return IMoniker_BindToStorage(This, pbc, pmkToLeft, riid, (void**)ppvObj);
|
||||
}
|
||||
|
||||
HRESULT CALLBACK IEnumString_Next_Proxy(
|
||||
|
|
|
@ -130,7 +130,7 @@ reactos/dll/win32/ntprint # Synced to Wine-1.5.4
|
|||
reactos/dll/win32/objsel # Synced to Wine-1.5.19
|
||||
reactos/dll/win32/odbc32 # Out of sync. Depends on port of Linux ODBC.
|
||||
reactos/dll/win32/odbccp32 # Synced to Wine-1.5.19
|
||||
reactos/dll/win32/ole32 # Synced to Wine-1.5.19
|
||||
reactos/dll/win32/ole32 # Synced to Wine-1.5.26
|
||||
reactos/dll/win32/oleacc # Autosync
|
||||
reactos/dll/win32/oleaut32 # Synced to Wine-1.5.19
|
||||
reactos/dll/win32/olecli32 # Synced to Wine-1.5.19
|
||||
|
|
Loading…
Reference in a new issue