Sync to Wine-20050419:

Peter Berg Larsen <pebl@math.ku.dk>
- Strncpy elimination.
- Janitorial: Get rid of strncpy/strncpyW.
Jakob Eriksson <jakov@vmlinux.org>
- Get rid of HeapAlloc casts.
Troy Rollo <wine@troy.rollo.name>
- Corrections to UrlIsW and UrlIsA.
- URL_IS_OPAQUE results depend only on the scheme, not on the URL.
- URL_IS_FILEURL also only depends on the scheme ("file:").
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
Robert Shearman <rob@codeweavers.com>
- Fix SHCopyKey to treat string parameter correctly as source path
  instead of destination path.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Use LMEM_ flags for LocalAlloc(), not GMEM_ (GlobalAlloc).
- Implement @188,190,195,200,256,478,481.
- IUnknown_EnableModeless() also handles IOleInPlaceActiveObject.
- Tests and small fix for PathMakePretty().
- Fix a crash and test failure with early native dlls.

svn path=/trunk/; revision=15050
This commit is contained in:
Gé van Geldorp 2005-05-06 16:23:24 +00:00
parent c72be4b69c
commit bb1d3b119b
13 changed files with 466 additions and 130 deletions

View file

@ -34,6 +34,7 @@ DEFINE_SHLGUID(IID_IEnumIDList, 0x000214F2L, 0, 0);
DEFINE_SHLGUID(IID_IShellLinkW, 0x000214F9L, 0, 0);
DEFINE_SHLGUID(IID_IShellExecuteHookA, 0x000214F5L, 0, 0);
DEFINE_SHLGUID(IID_IShellExecuteHookW, 0x000214FBL, 0, 0);
DEFINE_SHLGUID(IID_IQueryInfo, 0x00021500L, 0, 0);
DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40L, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
@ -52,4 +53,7 @@ DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x0, 0
DEFINE_GUID(CLSID_AutoComplete, 0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62);
DEFINE_GUID(IID_IInputObject, 0x068284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4);
DEFINE_GUID(IID_IInputObjectSite, 0x0F1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8);
#endif /* __WINE_SHLGUID_H */

View file

@ -352,7 +352,7 @@ static IStream *IStream_Create(LPCWSTR lpszPath, HANDLE hFile, DWORD dwMode)
{
ISHFileStream* fileStream;
fileStream = (ISHFileStream*)HeapAlloc(GetProcessHeap(), 0, sizeof(ISHFileStream));
fileStream = HeapAlloc(GetProcessHeap(), 0, sizeof(ISHFileStream));
if (fileStream)
{

View file

@ -1847,13 +1847,47 @@ DWORD WINAPI SHLoadFromPropertyBag(IUnknown *lpUnknown, IPropertyBag* lpPropBag)
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.188]
*
* Call IOleControlSite_TranslateAccelerator() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IOleControlSite interface.
* lpMsg [I] Key message to be processed.
* dwModifiers [I] Flags containing the state of the modifier keys.
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.
*/
HRESULT WINAPI IUnknown_TranslateAcceleratorOCS(IUnknown *lpUnknown, LPMSG lpMsg, DWORD dwModifiers)
{
IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_INVALIDARG;
TRACE("(%p,%p,0x%08lx)\n", lpUnknown, lpMsg, dwModifiers);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,
(void**)&lpCSite);
if (SUCCEEDED(hRet) && lpCSite)
{
hRet = IOleControlSite_TranslateAccelerator(lpCSite, lpMsg, dwModifiers);
IOleControlSite_Release(lpCSite);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.189]
*
* Call IOleControlSite_GetExtendedControl() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IOleControlSite interface
* lpUnknown [I] Object supporting the IOleControlSite interface.
* lppDisp [O] Destination for resulting IDispatch.
*
* RETURNS
@ -1862,7 +1896,7 @@ DWORD WINAPI SHLoadFromPropertyBag(IUnknown *lpUnknown, IPropertyBag* lpPropBag)
*/
DWORD WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, IDispatch** lppDisp)
{
IOleControlSite* lpCSite;
IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_FAIL;
TRACE("(%p,%p)\n", lpUnknown, lppDisp);
@ -1879,6 +1913,41 @@ DWORD WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, IDispatch** lppDisp)
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.190]
*/
HRESULT WINAPI IUnknown_HandleIRestrict(LPUNKNOWN lpUnknown, PVOID lpArg1,
PVOID lpArg2, PVOID lpArg3, PVOID lpArg4)
{
/* FIXME: {D12F26B2-D90A-11D0-830D-00AA005B4383} - What object does this represent? */
static const DWORD service_id[] = { 0xd12f26b2, 0x11d0d90a, 0xaa000d83, 0x83435b00 };
/* FIXME: {D12F26B1-D90A-11D0-830D-00AA005B4383} - Also Unknown/undocumented */
static const DWORD function_id[] = { 0xd12f26b1, 0x11d0d90a, 0xaa000d83, 0x83435b00 };
HRESULT hRet = E_INVALIDARG;
LPUNKNOWN lpUnkInner = NULL; /* FIXME: Real type is unknown */
TRACE("(%p,%p,%p,%p,%p)\n", lpUnknown, lpArg1, lpArg2, lpArg3, lpArg4);
if (lpUnknown && lpArg4)
{
hRet = IUnknown_QueryService(lpUnknown, (REFGUID)service_id,
(REFGUID)function_id, (void**)&lpUnkInner);
if (SUCCEEDED(hRet) && lpUnkInner)
{
/* FIXME: The type of service object requested is unknown, however
* testing shows that its first method is called with 4 parameters.
* Fake this by using IParseDisplayName_ParseDisplayName since the
* signature and position in the vtable matches our unknown object type.
*/
hRet = IParseDisplayName_ParseDisplayName((LPPARSEDISPLAYNAME)lpUnkInner,
lpArg1, lpArg2, lpArg3, lpArg4);
IUnknown_Release(lpUnkInner);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.192]
*
@ -1965,6 +2034,55 @@ DWORD WINAPI SHWaitForSendMessageThread(HANDLE hand, DWORD dwTimeout)
return dwRet;
}
/*************************************************************************
* @ [SHLWAPI.195]
*
* Determine if a shell folder can be expanded.
*
* PARAMS
* lpFolder [I] Parent folder containing the object to test.
* pidl [I] Id of the object to test.
*
* RETURNS
* Success: S_OK, if the object is expandable, S_FALSE otherwise.
* Failure: E_INVALIDARG, if any argument is invalid.
*
* NOTES
* If the object to be tested does not expose the IQueryInfo() interface it
* will not be identified as an expandable folder.
*/
HRESULT WINAPI SHIsExpandableFolder(LPSHELLFOLDER lpFolder, LPCITEMIDLIST pidl)
{
HRESULT hRet = E_INVALIDARG;
IQueryInfo *lpInfo;
if (lpFolder && pidl)
{
hRet = IShellFolder_GetUIObjectOf(lpFolder, NULL, 1, &pidl, &IID_IQueryInfo,
NULL, (void**)&lpInfo);
if (FAILED(hRet))
hRet = S_FALSE; /* Doesn't expose IQueryInfo */
else
{
DWORD dwFlags = 0;
/* MSDN states of IQueryInfo_GetInfoFlags() that "This method is not
* currently used". Really? You wouldn't be holding out on me would you?
*/
hRet = IQueryInfo_GetInfoFlags(lpInfo, &dwFlags);
if (SUCCEEDED(hRet))
{
/* 0x2 is an undocumented flag apparently indicating expandability */
hRet = dwFlags & 0x2 ? S_OK : S_FALSE;
}
IQueryInfo_Release(lpInfo);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.197]
*
@ -2050,6 +2168,21 @@ VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
}
}
/*************************************************************************
* @ [SHLWAPI.200]
*
*/
HRESULT WINAPI MayQSForward(IUnknown* lpUnknown, PVOID lpReserved,
REFGUID riidCmdGrp, ULONG cCmds,
OLECMD *prgCmds, OLECMDTEXT* pCmdText)
{
FIXME("(%p,%p,%p,%ld,%p,%p) - stub\n",
lpUnknown, lpReserved, riidCmdGrp, cCmds, prgCmds, pCmdText);
/* FIXME: Calls IsQSForward & IUnknown_QueryStatus */
return DRAGDROP_E_NOTREGISTERED;
}
/*************************************************************************
* @ [SHLWAPI.201]
*
@ -2350,6 +2483,29 @@ LRESULT CALLBACK SHDefWindowProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM
return DefWindowProcA(hWnd, uMessage, wParam, lParam);
}
/*************************************************************************
* @ [SHLWAPI.256]
*/
HRESULT WINAPI IUnknown_GetSite(LPUNKNOWN lpUnknown, REFIID iid, PVOID *lppSite)
{
HRESULT hRet = E_INVALIDARG;
LPOBJECTWITHSITE lpSite = NULL;
TRACE("(%p,%s,%p)\n", lpUnknown, debugstr_guid(iid), lppSite);
if (lpUnknown && iid && lppSite)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IObjectWithSite,
(void**)&lpSite);
if (SUCCEEDED(hRet) && lpSite)
{
hRet = IObjectWithSite_GetSite(lpSite, iid, lppSite);
IObjectWithSite_Release(lpSite);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.257]
*
@ -2510,7 +2666,7 @@ DWORD WINAPI SHRestrictionLookup(
* Failure: An HRESULT error code.
*
* NOTES
* This QueryInterface asks the inner object for a interface. In case
* This QueryInterface asks the inner object for an interface. In case
* of aggregation this request would be forwarded by the inner to the
* outer object. This function asks the inner object directly for the
* interface circumventing the forwarding to the outer object.
@ -3051,7 +3207,8 @@ WORD WINAPI VerQueryValueWrapW(
* NOTES
* lpUnknown must support the IOleInPlaceFrame interface, the
* IInternetSecurityMgrSite interface, the IShellBrowser interface
* or the IDocHostUIHandler interface, or this call fails.
* the IDocHostUIHandler interface, or the IOleInPlaceActiveObject interface,
* or this call will fail.
*/
HRESULT WINAPI IUnknown_EnableModeless(IUnknown *lpUnknown, BOOL bModeless)
{
@ -3063,7 +3220,9 @@ HRESULT WINAPI IUnknown_EnableModeless(IUnknown *lpUnknown, BOOL bModeless)
if (!lpUnknown)
return E_FAIL;
if (IsIface(IOleInPlaceFrame))
if (IsIface(IOleInPlaceActiveObject))
EnableModeless(IOleInPlaceActiveObject);
else if (IsIface(IOleInPlaceFrame))
EnableModeless(IOleInPlaceFrame);
else if (IsIface(IShellBrowser))
EnableModeless(IShellBrowser);
@ -3746,6 +3905,70 @@ BOOL WINAPI IsOS(DWORD feature)
return FALSE;
}
/*************************************************************************
* @ [SHLWAPI.478]
*
* Call IInputObject_TranslateAcceleratorIO() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IInputObject interface.
* lpMsg [I] Key message to be processed.
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.
*/
HRESULT WINAPI IUnknown_TranslateAcceleratorIO(IUnknown *lpUnknown, LPMSG lpMsg)
{
IInputObject* lpInput = NULL;
HRESULT hRet = E_INVALIDARG;
TRACE("(%p,%p)\n", lpUnknown, lpMsg);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInputObject,
(void**)&lpInput);
if (SUCCEEDED(hRet) && lpInput)
{
hRet = IInputObject_TranslateAcceleratorIO(lpInput, lpMsg);
IInputObject_Release(lpInput);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.481]
*
* Call IInputObject_HasFocusIO() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IInputObject interface.
*
* RETURNS
* Success: S_OK, if lpUnknown is an IInputObject object and has the focus,
* or S_FALSE otherwise.
* Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.
*/
HRESULT WINAPI IUnknown_HasFocusIO(IUnknown *lpUnknown)
{
IInputObject* lpInput = NULL;
HRESULT hRet = E_INVALIDARG;
TRACE("(%p)\n", lpUnknown);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInputObject,
(void**)&lpInput);
if (SUCCEEDED(hRet) && lpInput)
{
hRet = IInputObject_HasFocusIO(lpInput);
IInputObject_Release(lpInput);
}
}
return hRet;
}
/*************************************************************************
* ColorRGBToHLS [SHLWAPI.@]
*
@ -3940,9 +4163,9 @@ VOID WINAPI FixSlashesAndColonW(LPWSTR lpwstr)
/*************************************************************************
* @ [SHLWAPI.461]
*/
DWORD WINAPI SHGetAppCompatFlags(DWORD Unknown)
DWORD WINAPI SHGetAppCompatFlags(DWORD dwUnknown)
{
FIXME("stub\n");
FIXME("(0x%08lx) stub\n", dwUnknown);
return 0;
}
@ -4015,17 +4238,24 @@ HRESULT WINAPI SHQueueUserWorkItem(DWORD a, DWORD b, DWORD c, DWORD d, DWORD e,
/***********************************************************************
* IUnknown_OnFocusChangeIS (SHLWAPI.@)
*/
DWORD WINAPI IUnknown_OnFocusChangeIS(IUnknown * pUnk, IUnknown * pFocusObject, BOOL bChange)
HRESULT WINAPI IUnknown_OnFocusChangeIS(LPUNKNOWN lpUnknown, LPUNKNOWN pFocusObject, BOOL bFocus)
{
FIXME("(%p, %p, %s)\n", pUnk, pFocusObject, bChange ? "TRUE" : "FALSE");
/*
IInputObjectSite *pIOS = NULL;
if (SUCCEEDED(IUnknown_QueryInterface(pUnk, &IID_IInputObjectSite, (void **)&pIOS))
IInputObjectSite_OnFocusChangeIS(pIOS, pFocusObject, bChange);
*/
HRESULT hRet = E_INVALIDARG;
return 0;
TRACE("(%p, %p, %s)\n", lpUnknown, pFocusObject, bFocus ? "TRUE" : "FALSE");
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IInputObjectSite,
(void **)&pIOS);
if (SUCCEEDED(hRet) && pIOS)
{
hRet = IInputObjectSite_OnFocusChangeIS(pIOS, pFocusObject, bFocus);
IInputObjectSite_Release(pIOS);
}
}
return hRet;
}
/***********************************************************************

View file

@ -168,14 +168,14 @@ LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
if (!lpszFile || !*lpszFile)
{
/* Use dir only */
strncpyW(szTemp, lpszDir, MAX_PATH);
lstrcpynW(szTemp, lpszDir, MAX_PATH);
}
else if (!lpszDir || !*lpszDir || !PathIsRelativeW(lpszFile))
{
if (!lpszDir || !*lpszDir || *lpszFile != '\\' || PathIsUNCW(lpszFile))
{
/* Use file only */
strncpyW(szTemp, lpszFile, MAX_PATH);
lstrcpynW(szTemp, lpszFile, MAX_PATH);
}
else
{
@ -188,7 +188,7 @@ LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
if (bUseBoth)
{
strncpyW(szTemp, lpszDir, MAX_PATH);
lstrcpynW(szTemp, lpszDir, MAX_PATH);
if (bStrip)
{
PathStripToRootW(szTemp);
@ -1687,7 +1687,8 @@ BOOL WINAPI PathFileExistsA(LPCSTR lpszPath)
if (!lpszPath)
return FALSE;
iPrevErrMode = SetErrorMode(1);
/* Prevent a dialog box if path is on a disk that has been ejected. */
iPrevErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);
dwAttr = GetFileAttributesA(lpszPath);
SetErrorMode(iPrevErrMode);
return dwAttr == INVALID_FILE_ATTRIBUTES ? FALSE : TRUE;
@ -1708,7 +1709,7 @@ BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
if (!lpszPath)
return FALSE;
iPrevErrMode = SetErrorMode(1);
iPrevErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);
dwAttr = GetFileAttributesW(lpszPath);
SetErrorMode(iPrevErrMode);
return dwAttr == INVALID_FILE_ATTRIBUTES ? FALSE : TRUE;
@ -2580,21 +2581,24 @@ BOOL WINAPI PathMakePrettyA(LPSTR lpszPath)
TRACE("(%s)\n", debugstr_a(lpszPath));
if (!pszIter || !*pszIter)
if (!pszIter)
return FALSE;
while (*pszIter)
if (*pszIter)
{
do
{
if (islower(*pszIter) || IsDBCSLeadByte(*pszIter))
return FALSE; /* Not DOS path */
pszIter++;
}
} while (*pszIter);
pszIter = lpszPath + 1;
while (*pszIter)
{
*pszIter = tolower(*pszIter);
pszIter++;
}
}
return TRUE;
}
@ -2609,21 +2613,24 @@ BOOL WINAPI PathMakePrettyW(LPWSTR lpszPath)
TRACE("(%s)\n", debugstr_w(lpszPath));
if (!pszIter || !*pszIter)
if (!pszIter)
return FALSE;
while (*pszIter)
if (*pszIter)
{
do
{
if (islowerW(*pszIter))
return FALSE; /* Not DOS path */
pszIter++;
}
} while (*pszIter);
pszIter = lpszPath + 1;
while (*pszIter)
{
*pszIter = tolowerW(*pszIter);
pszIter++;
}
}
return TRUE;
}
@ -2767,7 +2774,7 @@ int WINAPI PathCommonPrefixW(LPCWSTR lpszFile1, LPCWSTR lpszFile2, LPWSTR achPat
* dx [I] Desired width
*
* RETURNS
* TRUE If the path was modified.
* TRUE If the path was modified/went well.
* FALSE Otherwise.
*/
BOOL WINAPI PathCompactPathA(HDC hDC, LPSTR lpszPath, UINT dx)
@ -2803,7 +2810,7 @@ BOOL WINAPI PathCompactPathW(HDC hDC, LPWSTR lpszPath, UINT dx)
TRACE("(%p,%s,%d)\n", hDC, debugstr_w(lpszPath), dx);
if (!lpszPath)
return bRet;
return FALSE;
if (!hDC)
hdc = hDC = GetDC(0);
@ -2838,7 +2845,7 @@ BOOL WINAPI PathCompactPathW(HDC hDC, LPWSTR lpszPath, UINT dx)
* the file name as possible, allowing for the ellipses, e.g:
* c:\some very long path\filename ==> c:\some v...\filename
*/
strncpyW(buff, sFile, MAX_PATH);
lstrcpynW(buff, sFile, MAX_PATH);
do
{
@ -2880,7 +2887,7 @@ BOOL WINAPI PathCompactPathW(HDC hDC, LPWSTR lpszPath, UINT dx)
if (dwLen > MAX_PATH - 3)
dwLen = MAX_PATH - 3;
strncpyW(buff, sFile, dwLen);
lstrcpynW(buff, sFile, dwLen);
do {
dwLen--;
@ -3390,8 +3397,8 @@ BOOL WINAPI PathRelativePathToW(LPWSTR lpszPath, LPCWSTR lpszFrom, DWORD dwAttrF
return FALSE;
*lpszPath = '\0';
strncpyW(szFrom, lpszFrom, MAX_PATH);
strncpyW(szTo, lpszTo, MAX_PATH);
lstrcpynW(szFrom, lpszFrom, MAX_PATH);
lstrcpynW(szTo, lpszTo, MAX_PATH);
if(!(dwAttrFrom & FILE_ATTRIBUTE_DIRECTORY))
PathRemoveFileSpecW(szFrom);
@ -3739,7 +3746,7 @@ BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath)
if (!lpszPath || !PathIsDirectoryW(lpszPath))
return FALSE;
strncpyW(szSearch, lpszPath, MAX_PATH);
lstrcpynW(szSearch, lpszPath, MAX_PATH);
PathAddBackslashW(szSearch);
dwLen = strlenW(szSearch);
if (dwLen > MAX_PATH - 4)

View file

@ -133,7 +133,7 @@ LONG WINAPI SHRegOpenUSKeyW(LPCWSTR Path, REGSAM AccessType, HUSKEY hRelativeUSK
*phNewUSKey = NULL;
/* Create internal HUSKEY */
hKey = (LPSHUSKEY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*hKey));
hKey = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*hKey));
lstrcpynW(hKey->lpszPath, Path, sizeof(hKey->lpszPath));
if (hRelativeUSKey)
@ -1305,7 +1305,7 @@ LONG WINAPI SHQueryInfoKeyW(HKEY hKey, LPDWORD pwSubKeys, LPDWORD pwSubKeyMax,
*
* subcase-2: buffer is to small to hold the expanded string:
* the function return success (!!) and the result is truncated
* *** This is clearly a error in the native implementation. ***
* *** This is clearly an error in the native implementation. ***
*
* case-2: the unexpanded string is bigger than the expanded one
* The buffer must have enough space to hold the unexpanded
@ -1340,7 +1340,7 @@ DWORD WINAPI SHQueryValueExA( HKEY hKey, LPCSTR lpszValue,
char cNull = '\0';
nBytesToAlloc = (!pvData || (dwRet == ERROR_MORE_DATA)) ? dwUnExpDataLen : *pcbData;
szData = (LPSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc);
szData = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
RegQueryValueExA (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc);
dwExpDataLen = ExpandEnvironmentStringsA(szData, &cNull, 1);
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
@ -1349,7 +1349,7 @@ DWORD WINAPI SHQueryValueExA( HKEY hKey, LPCSTR lpszValue,
else
{
nBytesToAlloc = (lstrlenA(pvData)+1) * sizeof (CHAR);
szData = (LPSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc );
szData = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc );
lstrcpyA(szData, pvData);
dwExpDataLen = ExpandEnvironmentStringsA(szData, pvData, *pcbData / sizeof(CHAR));
if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;
@ -1401,7 +1401,7 @@ DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue,
WCHAR cNull = '\0';
nBytesToAlloc = (!pvData || (dwRet == ERROR_MORE_DATA)) ? dwUnExpDataLen : *pcbData;
szData = (LPWSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc);
szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
RegQueryValueExW (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc);
dwExpDataLen = ExpandEnvironmentStringsW(szData, &cNull, 1);
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
@ -1410,7 +1410,7 @@ DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue,
else
{
nBytesToAlloc = (lstrlenW(pvData) + 1) * sizeof(WCHAR);
szData = (LPWSTR) LocalAlloc(GMEM_ZEROINIT, nBytesToAlloc );
szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc );
lstrcpyW(szData, pvData);
dwExpDataLen = ExpandEnvironmentStringsW(szData, pvData, *pcbData/sizeof(WCHAR) );
if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;
@ -2183,7 +2183,7 @@ HKEY WINAPI SHRegDuplicateHKey(HKEY hKey)
*
* PARAMS
* hKeySrc [I] Source key to copy from
* lpszSubKey [I] Sub key under hKeyDst, or NULL to use hKeyDst directly
* lpszSrcSubKey [I] Sub key under hKeySrc, or NULL to use hKeySrc directly
* hKeyDst [I] Destination key
* dwReserved [I] Reserved, must be 0
*
@ -2196,16 +2196,16 @@ HKEY WINAPI SHRegDuplicateHKey(HKEY hKey)
* (It will loop until out of stack, or the registry is full). This
* bug is present in Win32 also.
*/
DWORD WINAPI SHCopyKeyA(HKEY hKeySrc, LPCSTR lpszSubKey, HKEY hKeyDst, DWORD dwReserved)
DWORD WINAPI SHCopyKeyA(HKEY hKeySrc, LPCSTR lpszSrcSubKey, HKEY hKeyDst, DWORD dwReserved)
{
WCHAR szSubKeyW[MAX_PATH];
TRACE("(hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_a(lpszSubKey), hKeyDst, dwReserved);
TRACE("(hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_a(lpszSrcSubKey), hKeyDst, dwReserved);
if (lpszSubKey)
MultiByteToWideChar(0, 0, lpszSubKey, -1, szSubKeyW, MAX_PATH);
if (lpszSrcSubKey)
MultiByteToWideChar(0, 0, lpszSrcSubKey, -1, szSubKeyW, MAX_PATH);
return SHCopyKeyW(hKeySrc, lpszSubKey ? szSubKeyW : NULL, hKeyDst, dwReserved);
return SHCopyKeyW(hKeySrc, lpszSrcSubKey ? szSubKeyW : NULL, hKeyDst, dwReserved);
}
/*************************************************************************
@ -2213,7 +2213,7 @@ DWORD WINAPI SHCopyKeyA(HKEY hKeySrc, LPCSTR lpszSubKey, HKEY hKeyDst, DWORD dwR
*
* See SHCopyKeyA.
*/
DWORD WINAPI SHCopyKeyW(HKEY hKeySrc, LPCWSTR lpszSubKey, HKEY hKeyDst, DWORD dwReserved)
DWORD WINAPI SHCopyKeyW(HKEY hKeySrc, LPCWSTR lpszSrcSubKey, HKEY hKeyDst, DWORD dwReserved)
{
DWORD dwKeyCount = 0, dwValueCount = 0, dwMaxKeyLen = 0;
DWORD dwMaxValueLen = 0, dwMaxDataLen = 0, i;
@ -2222,18 +2222,18 @@ DWORD WINAPI SHCopyKeyW(HKEY hKeySrc, LPCWSTR lpszSubKey, HKEY hKeyDst, DWORD dw
WCHAR szName[MAX_PATH], *lpszName = szName;
DWORD dwRet = S_OK;
TRACE("hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_w(lpszSubKey), hKeyDst, dwReserved);
TRACE("hkey=%p,%s,%p08x,%ld)\n", hKeySrc, debugstr_w(lpszSrcSubKey), hKeyDst, dwReserved);
if(!hKeyDst || !hKeySrc)
dwRet = ERROR_INVALID_PARAMETER;
else
{
/* Open destination key */
if(lpszSubKey)
dwRet = RegOpenKeyExW(hKeyDst, lpszSubKey, 0, KEY_ALL_ACCESS, &hKeyDst);
/* Open source key */
if(lpszSrcSubKey)
dwRet = RegOpenKeyExW(hKeySrc, lpszSrcSubKey, 0, KEY_ALL_ACCESS, &hKeySrc);
if(dwRet)
hKeyDst = 0; /* Don't close this key since we didn't open it */
hKeyDst = NULL; /* Don't close this key since we didn't open it */
else
{
/* Get details about sub keys and values */
@ -2303,7 +2303,7 @@ DWORD WINAPI SHCopyKeyW(HKEY hKeySrc, LPCWSTR lpszSubKey, HKEY hKeyDst, DWORD dw
if (lpBuff != buff)
HeapFree(GetProcessHeap(), 0, lpBuff);
if (lpszSubKey && hKeyDst)
if (lpszSrcSubKey && hKeyDst)
RegCloseKey(hKeyDst);
return dwRet;
}

View file

@ -343,7 +343,7 @@ static IStream *IStream_Create(HKEY hKey, LPBYTE pbBuffer, DWORD dwLength)
{
ISHRegStream* regStream;
regStream = (ISHRegStream*)HeapAlloc(GetProcessHeap(), 0, sizeof(ISHRegStream));
regStream = HeapAlloc(GetProcessHeap(), 0, sizeof(ISHRegStream));
if (regStream)
{
@ -493,7 +493,7 @@ IStream * WINAPI SHCreateMemStream(LPBYTE lpbData, DWORD dwDataLen)
if (lpbData)
{
LPBYTE lpbDup = (LPBYTE)HeapAlloc(GetProcessHeap(), 0, dwDataLen);
LPBYTE lpbDup = HeapAlloc(GetProcessHeap(), 0, dwDataLen);
if (lpbDup)
{

View file

@ -185,19 +185,19 @@
185 stdcall -noname SHMessageBoxCheckA(ptr str str long long str)
186 stdcall -noname SHSimulateDrop(ptr ptr long ptr ptr)
187 stdcall -noname SHLoadFromPropertyBag(ptr ptr)
188 stub -noname IUnknown_TranslateAcceleratorOCS
188 stdcall -noname IUnknown_TranslateAcceleratorOCS(ptr ptr long)
189 stdcall -noname IUnknown_OnFocusOCS(ptr ptr)
190 stub -noname IUnknown_HandleIRestrict
190 stdcall -noname IUnknown_HandleIRestrict(ptr ptr ptr ptr ptr)
191 stdcall -noname SHMessageBoxCheckW(ptr wstr wstr long long wstr)
192 stdcall -noname SHGetMenuFromID(ptr long)
193 stdcall -noname SHGetCurColorRes()
194 stdcall -noname SHWaitForSendMessageThread(ptr long)
195 stub -noname SHIsExpandableFolder
196 stub -noname DnsRecordSetCompare
195 stdcall -noname SHIsExpandableFolder(ptr ptr)
196 stub -noname DnsRecordSetCompare #stdcall @(ptr ptr ptr ptr) dnsapi.DnsRecordSetCompare
197 stdcall -noname SHFillRectClr(long ptr long)
198 stdcall -noname SHSearchMapInt(ptr ptr long long)
199 stdcall -noname IUnknown_Set(ptr ptr)
200 stub -noname MayQSForward
200 stdcall -noname MayQSForward(ptr ptr ptr long ptr ptr)
201 stdcall -noname MayExecForward(ptr long ptr long long ptr ptr)
202 stdcall -noname IsQSForward(ptr long ptr)
203 stdcall -noname SHStripMneumonicA(str)
@ -253,7 +253,7 @@
253 stub -noname StopWatchExA
254 stub -noname StopWatchExW
255 stub -noname EventTraceHandler
256 stub -noname IUnknown_GetSite
256 stdcall -noname IUnknown_GetSite(ptr ptr ptr)
257 stdcall -noname SHCreateWorkerWindowA(long ptr long long ptr long)
258 stub -noname SHRegisterWaitForSingleObject
259 stub -noname SHUnregisterWait
@ -475,10 +475,10 @@
475 stub -noname GetShellSecurityDescriptor
476 stub -noname SHGetObjectCompatFlags
477 stub -noname SHCreatePropertyBagOnMemory
478 stub -noname IUnknown_TranslateAcceleratorIO
478 stdcall -noname IUnknown_TranslateAcceleratorIO(ptr ptr)
479 stub -noname IUnknown_UIActivateIO
480 stub -noname UrlCrackW
481 stub -noname IUnknown_HasFocusIO
481 stdcall -noname IUnknown_HasFocusIO(ptr)
482 stub -noname SHMessageBoxHelpA
483 stub -noname SHMessageBoxHelpW
484 stub -noname IUnknown_QueryServiceExec
@ -543,7 +543,7 @@
548 stub -noname SHAreIconsEqual
549 stdcall -noname SHCoCreateInstanceAC(ptr ptr long ptr ptr)
550 stub -noname GetTemplateInfoFroHandle
550 stub -noname GetTemplateInfoFromHandle
551 stub -noname IShellFolder_CompareIDs
@ stdcall AssocCreate(long long long long ptr ptr)

View file

@ -1577,7 +1577,7 @@ LPSTR WINAPI StrFormatKBSizeA(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
ulKB = (ulKB - ulNextDigit) / 10;
} while (ulKB > 0);
strncpy(lpszDest, szOut + 1, cchMax);
lstrcpynA(lpszDest, szOut + 1, cchMax);
return lpszDest;
}
@ -1605,7 +1605,7 @@ LPWSTR WINAPI StrFormatKBSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
ulKB = (ulKB - ulNextDigit) / 10;
} while (ulKB > 0);
strncpyW(lpszDest, szOut + 1, cchMax);
lstrcpynW(lpszDest, szOut + 1, cchMax);
return lpszDest;
}
@ -2027,7 +2027,7 @@ INT WINAPI StrFromTimeIntervalW(LPWSTR lpszStr, UINT cchMax, DWORD dwMS,
if (iDigits) /* Always write seconds if we have significant digits */
SHLWAPI_WriteTimeClass(szCopy, dwMS, szSec, iDigits);
strncpyW(lpszStr, szCopy, cchMax);
lstrcpynW(lpszStr, szCopy, cchMax);
iRet = strlenW(lpszStr);
}
return iRet;
@ -2301,7 +2301,7 @@ LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
sprintfW(wszBuff, bfFormats[i].lpwszFormat, dBytes);
wszAdd[1] = bfFormats[i].wPrefix;
strcatW(wszBuff, wszAdd);
strncpyW(lpszDest, wszBuff, cchMax);
lstrcpynW(lpszDest, wszBuff, cchMax);
return lpszDest;
}
@ -2546,7 +2546,7 @@ INT WINAPI SHUnicodeToAnsiCP(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr,
if (nWideCharCount < len - 1)
{
mem = (LPSTR)HeapAlloc(GetProcessHeap(), 0, *lpiLen);
mem = HeapAlloc(GetProcessHeap(), 0, *lpiLen);
if (!mem)
return 0;
@ -2577,7 +2577,7 @@ INT WINAPI SHUnicodeToAnsiCP(UINT CodePage, LPCWSTR lpSrcStr, LPSTR lpDstStr,
reqLen = WideCharToMultiByte(CodePage, 0, lpSrcStr, len, NULL, 0, NULL, NULL);
if (reqLen)
{
mem = (LPSTR)HeapAlloc(GetProcessHeap(), 0, reqLen);
mem = HeapAlloc(GetProcessHeap(), 0, reqLen);
if (mem)
{
reqLen = WideCharToMultiByte(CodePage, 0, lpSrcStr, len, mem,
@ -2638,9 +2638,6 @@ DWORD WINAPI SHAnsiToAnsi(LPCSTR lpszSrc, LPSTR lpszDst, int iLen)
TRACE("(%s,%p,0x%08x)\n", debugstr_a(lpszSrc), lpszDst, iLen);
/* Our original version used lstrncpy/lstrlen, incorrectly filling up all
* of lpszDst with extra NULs. This version is correct, and faster too.
*/
lpszRet = StrCpyNXA(lpszDst, lpszSrc, iLen);
return lpszRet - lpszDst + 1;
}

View file

@ -238,7 +238,7 @@ HRESULT WINAPI ParseURLW(LPCWSTR x, PARSEDURLW *y)
/* see if known scheme and return indicator number */
len = WideCharToMultiByte(0, 0, y->pszProtocol, y->cchProtocol, 0, 0, 0, 0);
cmpstr = (LPSTR)HeapAlloc(GetProcessHeap(), 0, len);
cmpstr = HeapAlloc(GetProcessHeap(), 0, len);
WideCharToMultiByte(0, 0, y->pszProtocol, y->cchProtocol, cmpstr, len, 0, 0);
y->nScheme = URL_SCHEME_UNKNOWN;
inet_pro = shlwapi_schemes;
@ -329,7 +329,7 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
DWORD EscapeFlags;
LPWSTR lpszUrlCpy, wk1, wk2, mp, root;
INT nByteLen, state;
DWORD nLen;
DWORD nLen, nWkLen;
TRACE("(%s %p %p 0x%08lx)\n", debugstr_w(pszUrl), pszCanonicalized,
pcchCanonicalized, dwFlags);
@ -379,9 +379,10 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
state = 4;
break;
case 3:
strcpyW(wk2, wk1);
wk1 += strlenW(wk1);
wk2 += strlenW(wk2);
nWkLen = strlenW(wk1);
memcpy(wk2, wk1, (nWkLen + 1) * sizeof(WCHAR));
wk1 += nWkLen;
wk2 += nWkLen;
break;
case 4:
if (!isalnumW(*wk1) && (*wk1 != L'-') && (*wk1 != L'.')) {state = 3; break;}
@ -401,13 +402,14 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
TRACE("wk1=%c\n", (CHAR)*wk1);
mp = strchrW(wk1, L'/');
if (!mp) {
strcpyW(wk2, wk1);
wk1 += strlenW(wk1);
wk2 += strlenW(wk2);
nWkLen = strlenW(wk1);
memcpy(wk2, wk1, (nWkLen + 1) * sizeof(WCHAR));
wk1 += nWkLen;
wk2 += nWkLen;
continue;
}
nLen = mp - wk1 + 1;
strncpyW(wk2, wk1, nLen);
memcpy(wk2, wk1, nLen * sizeof(WCHAR));
wk2 += nLen;
wk1 += nLen;
if (*wk1 == L'.') {
@ -517,7 +519,7 @@ HRESULT WINAPI UrlCombineA(LPCSTR pszBase, LPCSTR pszRelative,
if(!pszBase || !pszRelative || !pcchCombined)
return E_INVALIDARG;
base = (LPWSTR) HeapAlloc(GetProcessHeap(), 0,
base = HeapAlloc(GetProcessHeap(), 0,
(3*INTERNET_MAX_URL_LENGTH) * sizeof(WCHAR));
relative = base + INTERNET_MAX_URL_LENGTH;
combined = relative + INTERNET_MAX_URL_LENGTH;
@ -718,7 +720,7 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
* Return the pszBase scheme with pszRelative. Basically
* keeps the scheme and replaces the domain and following.
*/
strncpyW(preliminary, base.pszProtocol, base.cchProtocol + 1);
memcpy(preliminary, base.pszProtocol, (base.cchProtocol + 1)*sizeof(WCHAR));
work = preliminary + base.cchProtocol + 1;
strcpyW(work, relative.pszSuffix);
if (!(dwFlags & URL_PLUGGABLE_PROTOCOL) &&
@ -731,7 +733,7 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
* after the location is pszRelative. (Replace document
* from root on.)
*/
strncpyW(preliminary, base.pszProtocol, base.cchProtocol+1+sizeloc);
memcpy(preliminary, base.pszProtocol, (base.cchProtocol+1+sizeloc)*sizeof(WCHAR));
work = preliminary + base.cchProtocol + 1 + sizeloc;
if (dwFlags & URL_PLUGGABLE_PROTOCOL)
*(work++) = L'/';
@ -742,7 +744,8 @@ HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative,
* Return the pszBase without its document (if any) and
* append pszRelative after its scheme.
*/
strncpyW(preliminary, base.pszProtocol, base.cchProtocol+1+base.cchSuffix);
memcpy(preliminary, base.pszProtocol,
(base.cchProtocol+1+base.cchSuffix)*sizeof(WCHAR));
work = preliminary + base.cchProtocol+1+base.cchSuffix - 1;
if (*work++ != L'/')
*(work++) = L'/';
@ -1640,13 +1643,19 @@ BOOL WINAPI UrlIsA(LPCSTR pszUrl, URLIS Urlis)
base.cbSize = sizeof(base);
res1 = ParseURLA(pszUrl, &base);
if (res1) return FALSE; /* invalid scheme */
if ((*base.pszSuffix == '/') && (*(base.pszSuffix+1) == '/'))
/* has scheme followed by 2 '/' */
return FALSE;
switch (base.nScheme)
{
case URL_SCHEME_MAILTO:
case URL_SCHEME_SHELL:
case URL_SCHEME_JAVASCRIPT:
case URL_SCHEME_VBSCRIPT:
case URL_SCHEME_ABOUT:
return TRUE;
}
return FALSE;
case URLIS_FILEURL:
return !StrCmpNA("file://", pszUrl, 7);
return !StrCmpNA("file:", pszUrl, 5);
case URLIS_DIRECTORY:
last = pszUrl + strlen(pszUrl) - 1;
@ -1671,7 +1680,7 @@ BOOL WINAPI UrlIsA(LPCSTR pszUrl, URLIS Urlis)
*/
BOOL WINAPI UrlIsW(LPCWSTR pszUrl, URLIS Urlis)
{
static const WCHAR stemp[] = { 'f','i','l','e',':','/','/',0 };
static const WCHAR stemp[] = { 'f','i','l','e',':',0 };
PARSEDURLW base;
DWORD res1;
LPCWSTR last;
@ -1684,13 +1693,19 @@ BOOL WINAPI UrlIsW(LPCWSTR pszUrl, URLIS Urlis)
base.cbSize = sizeof(base);
res1 = ParseURLW(pszUrl, &base);
if (res1) return FALSE; /* invalid scheme */
if ((*base.pszSuffix == '/') && (*(base.pszSuffix+1) == '/'))
/* has scheme followed by 2 '/' */
return FALSE;
switch (base.nScheme)
{
case URL_SCHEME_MAILTO:
case URL_SCHEME_SHELL:
case URL_SCHEME_JAVASCRIPT:
case URL_SCHEME_VBSCRIPT:
case URL_SCHEME_ABOUT:
return TRUE;
}
return FALSE;
case URLIS_FILEURL:
return !strncmpW(stemp, pszUrl, 7);
return !strncmpW(stemp, pszUrl, 5);
case URLIS_DIRECTORY:
last = pszUrl + strlenW(pszUrl) - 1;
@ -1937,7 +1952,9 @@ static LONG URL_ParseUrl(LPCWSTR pszUrl, WINE_PARSE_URL *pl)
* PARAMS
* pszIn [I] Url to parse
* pszOut [O] Destination for part of pszIn requested
* pcchOut [I/O] Length of pszOut/destination for length of pszOut
* pcchOut [I] Size of pszOut
* [O] length of pszOut string EXLUDING '\0' if S_OK, otherwise
* needed size of pszOut INCLUDING '\0'.
* dwPart [I] URL_PART_ enum from "shlwapi.h"
* dwFlags [I] URL_ flags from "shlwapi.h"
*
@ -1989,7 +2006,6 @@ HRESULT WINAPI UrlGetPartW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut,
HRESULT ret;
DWORD size, schsize;
LPCWSTR addr, schaddr;
LPWSTR work;
TRACE("(%s %p %p(%ld) %08lx %08lx)\n",
debugstr_w(pszIn), pszOut, pcchOut, *pcchOut, dwPart, dwFlags);
@ -2041,24 +2057,21 @@ HRESULT WINAPI UrlGetPartW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut,
}
if (dwFlags == URL_PARTFLAG_KEEPSCHEME) {
if (*pcchOut < size + schsize + 2) {
*pcchOut = size + schsize + 2;
if (*pcchOut < schsize + size + 2) {
*pcchOut = schsize + size + 2;
return E_POINTER;
}
strncpyW(pszOut, schaddr, schsize);
work = pszOut + schsize;
*work = L':';
strncpyW(work+1, addr, size);
*pcchOut = size + schsize + 1;
work += (size + 1);
*work = L'\0';
memcpy(pszOut, schaddr, schsize*sizeof(WCHAR));
pszOut[schsize] = ':';
memcpy(pszOut+schsize+1, addr, size*sizeof(WCHAR));
pszOut[schsize+1+size] = 0;
*pcchOut = schsize + 1 + size;
}
else {
if (*pcchOut < size + 1) {*pcchOut = size+1; return E_POINTER;}
strncpyW(pszOut, addr, size);
memcpy(pszOut, addr, size*sizeof(WCHAR));
pszOut[size] = 0;
*pcchOut = size;
work = pszOut + size;
*work = L'\0';
}
TRACE("len=%ld %s\n", *pcchOut, debugstr_w(pszOut));
}

View file

@ -21,6 +21,7 @@ typedef interface IFont *LPFONT;
typedef interface IFontDisp *LPFONTDISP;
typedef interface IOleUndoManager *LPOLEUNDOMANAGER;
typedef interface IQuickActivate *LPQUICKACTIVATE;
typedef interface IObjectWithSite *LPOBJECTWITHSITE;
#ifndef OLE2ANSI
typedef TEXTMETRICW TEXTMETRICOLE;
@ -731,6 +732,16 @@ DECLARE_INTERFACE_(IObjectWithSite,IUnknown)
};
#undef INTERFACE
#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IObjectWithSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IObjectWithSite_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IObjectWithSite_Release(p) (p)->lpVtbl->Release(p)
/*** IObjectWithSite methods ***/
#define IObjectWithSite_SetSite(p,a) (p)->lpVtbl->SetSite(p,a)
#define IObjectWithSite_GetSite(p,a,b) (p)->lpVtbl->GetSite(p,a,b)
#endif
EXTERN_C const IID IID_IOleInPlaceSiteWindowless;
#define INTERFACE IOleInPlaceSiteWindowless
DECLARE_INTERFACE_(IOleInPlaceSiteWindowless,IOleInPlaceSiteEx)

View file

@ -308,6 +308,22 @@ DECLARE_INTERFACE_(IOleInPlaceActiveObject,IOleWindow)
};
#undef INTERFACE
#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IOleInPlaceActiveObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IOleInPlaceActiveObject_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IOleInPlaceActiveObject_Release(p) (p)->lpVtbl->Release(p)
/*** IOleWindow methods ***/
#define IOleInPlaceActiveObject_GetWindow(p,a) (p)->lpVtbl->GetWindow(p,a)
#define IOleInPlaceActiveObject_ContextSensitiveHelp(p,a) (p)->lpVtbl->ContextSensitiveHelp(p,a)
/*** IOleInPlaceActiveObject methods ***/
#define IOleInPlaceActiveObject_TranslateAccelerator(p,a) (p)->lpVtbl->TranslateAccelerator(p,a)
#define IOleInPlaceActiveObject_OnFrameWindowActivate(p,a) (p)->lpVtbl->OnFrameWindowActivate(p,a)
#define IOleInPlaceActiveObject_OnDocWindowActivate(p,a) (p)->lpVtbl->OnDocWindowActivate(p,a)
#define IOleInPlaceActiveObject_ResizeBorder(p,a,b,c) (p)->lpVtbl->ResizeBorder(p,a,b,c)
#define IOleInPlaceActiveObject_EnableModeless(p,a) (p)->lpVtbl->EnableModeless(p,a)
#endif
EXTERN_C const IID IID_IOleInPlaceFrame;
#define INTERFACE IOleInPlaceFrame
DECLARE_INTERFACE_(IOleInPlaceFrame,IOleInPlaceUIWindow)

View file

@ -95,6 +95,8 @@ extern const GUID IID_IFileSystemBindData;
#define IID_IShellExecuteHook IID_IShellExecuteHookA
#define IID_INewShortcutHook IID_INewShortcutHookA
#endif
extern const GUID IID_IInputObject;
extern const GUID IID_IInputObjectSite;
#ifdef __cplusplus
}

View file

@ -930,6 +930,16 @@ DECLARE_INTERFACE_(IQueryInfo,IUnknown)
};
#undef INTERFACE
#if !defined(__cplusplus) || defined(CINTERFACE)
/*** IUnknown methods ***/
#define IQueryInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IQueryInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IQueryInfo_Release(p) (p)->lpVtbl->Release(p)
/*** IQueryInfo methods ***/
#define IQueryInfo_GetInfoTip(p,a,b) (p)->lpVtbl->GetInfoTip(p,a,b)
#define IQueryInfo_GetInfoFlags(p,a) (p)->lpVtbl->GetInfoFlags(p,a)
#endif
#define INTERFACE IShellExtInit
DECLARE_INTERFACE_(IShellExtInit, IUnknown)
{
@ -1622,6 +1632,52 @@ DECLARE_INTERFACE_(IDropTargetHelper, IUnknown)
#undef INTERFACE
#endif /* _WIN32_IE >= 0x0500 */
#define INTERFACE IInputObject
DECLARE_INTERFACE_(IInputObject,IUnknown)
{
/*** IUnknown methods ***/
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
/*** IInputObject methods ***/
STDMETHOD(UIActivateIO)(THIS_ BOOL bActivating, LPMSG lpMsg) PURE;
STDMETHOD(HasFocusIO)(THIS) PURE;
STDMETHOD(TranslateAcceleratorIO)(THIS_ LPMSG lpMsg) PURE;
};
#undef INTERFACE
#if defined(COBJMACROS)
/*** IUnknown methods ***/
#define IInputObject_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IInputObject_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IInputObject_Release(p) (p)->lpVtbl->Release(p)
/*** IInputObject methods ***/
#define IInputObject_UIActivateIO(p,a,b) (p)->lpVtbl->UIActivateIO(p,a,b)
#define IInputObject_HasFocusIO(p) (p)->lpVtbl->HasFocusIO(p)
#define IInputObject_TranslateAcceleratorIO(p,a) (p)->lpVtbl->TranslateAcceleratorIO(p,a)
#endif
#define INTERFACE IInputObjectSite
DECLARE_INTERFACE_(IInputObjectSite,IUnknown)
{
/*** IUnknown methods ***/
STDMETHOD_(HRESULT,QueryInterface) (THIS_ REFIID riid, void** ppvObject) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/*** IInputObjectSite methods ***/
STDMETHOD(OnFocusChangeIS)(THIS_ LPUNKNOWN lpUnknown, BOOL bFocus) PURE;
};
#undef INTERFACE
#if defined(COBJMACROS)
/*** IUnknown methods ***/
#define IInputObjectSite_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IInputObjectSite_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IInputObjectSite_Release(p) (p)->lpVtbl->Release(p)
/*** IInputObject methods ***/
#define IInputObjectSite_OnFocusChangeIS(p,a,b) (p)->lpVtbl->OnFocusChangeIS(p,a,b)
#endif
typedef HRESULT (CALLBACK *LPFNVIEWCALLBACK)(
IShellView* dwUser,
IShellFolder* pshf,