/* IEnumMoniker Local functions*/
-static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
+static HRESULT EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
ULONG pos, IEnumMoniker **ppenumMoniker);
static IrotHandle get_irot_handle(void)
{
PROCESS_INFORMATION pi;
STARTUPINFOW si;
- static WCHAR cmd[6];
- static const WCHAR rpcss[] = {'r','p','c','s','s',0};
+ WCHAR cmd[MAX_PATH];
+ static const WCHAR rpcss[] = {'\\','r','p','c','s','s','.','e','x','e',0};
BOOL rslt;
+ void *redir;
TRACE("\n");
- ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFOA));
si.cb = sizeof(STARTUPINFOA);
+ GetSystemDirectoryW( cmd, MAX_PATH - sizeof(rpcss)/sizeof(WCHAR) );
+ strcatW( cmd, rpcss );
- memcpy(cmd, rpcss, sizeof(rpcss));
-
- rslt = CreateProcessW(
- NULL, /* executable */
- cmd, /* command line */
- NULL, /* process security attributes */
- NULL, /* primary thread security attributes */
- FALSE, /* inherit handles */
- 0, /* creation flags */
- NULL, /* use parent's environment */
- NULL, /* use parent's current directory */
- &si, /* STARTUPINFO pointer */
- &pi /* PROCESS_INFORMATION */
- );
+ Wow64DisableWow64FsRedirection( &redir );
+ rslt = CreateProcessW( cmd, cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
+ Wow64RevertWow64FsRedirection( redir );
if (rslt)
{
if (IsEqualIID(&IID_IUnknown, riid) ||
IsEqualIID(&IID_IRunningObjectTable, riid))
- *ppvObject = (IRunningObjectTable*)This;
+ *ppvObject = This;
if ((*ppvObject)==0)
return E_NOINTERFACE;
}
/***********************************************************************
- * RunningObjectTable_Initialize
+ * RunningObjectTable_Destroy
*/
-static HRESULT WINAPI
+static HRESULT
RunningObjectTableImpl_Destroy(void)
{
struct list *cursor, *cursor2;
* grfFlags [in] Registration options
* punkObject [in] the object being registered
* pmkObjectName [in] the moniker of the object being registered
- * pdwRegister [in] the value identifying the registration
+ * pdwRegister [out] the value identifying the registration
*/
static HRESULT WINAPI
RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
TRACE("(%p, %s, %p, %p)\n", pbc, debugstr_w(szDisplayName), pchEaten, ppmk);
- if (!(IsValidInterface((LPUNKNOWN) pbc)))
+ if (!pbc || !IsValidInterface((LPUNKNOWN) pbc))
+ return E_INVALIDARG;
+
+ if (!szDisplayName || !*szDisplayName)
+ return E_INVALIDARG;
+
+ if (!pchEaten || !ppmk)
return E_INVALIDARG;
*pchEaten = 0;
*ppvObject = NULL;
if (IsEqualIID(&IID_IUnknown, riid))
- *ppvObject = (IEnumMoniker*)This;
+ *ppvObject = This;
else
if (IsEqualIID(&IID_IEnumMoniker, riid))
- *ppvObject = (IEnumMoniker*)This;
+ *ppvObject = This;
if ((*ppvObject)==NULL)
return E_NOINTERFACE;
return ref;
}
/***********************************************************************
- * EnmumMoniker_Next
+ * EnumMoniker_Next
*/
static HRESULT WINAPI EnumMonikerImpl_Next(IEnumMoniker* iface, ULONG celt, IMoniker** rgelt, ULONG * pceltFetched)
{
}
/***********************************************************************
- * EnmumMoniker_Skip
+ * EnumMoniker_Skip
*/
static HRESULT WINAPI EnumMonikerImpl_Skip(IEnumMoniker* iface, ULONG celt)
{
}
/***********************************************************************
- * EnmumMoniker_Reset
+ * EnumMoniker_Reset
*/
static HRESULT WINAPI EnumMonikerImpl_Reset(IEnumMoniker* iface)
{
}
/***********************************************************************
- * EnmumMoniker_Clone
+ * EnumMoniker_Clone
*/
static HRESULT WINAPI EnumMonikerImpl_Clone(IEnumMoniker* iface, IEnumMoniker ** ppenum)
{
* Used by EnumRunning to create the structure and EnumClone
* to copy the structure
*/
-static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
+static HRESULT EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
ULONG current_pos,
IEnumMoniker **ppenumMoniker)
{