diff --git a/dlls/shell32/pidl.c b/dlls/shell32/pidl.c index f450f5bd8e2..140671464a4 100644 --- a/dlls/shell32/pidl.c +++ b/dlls/shell32/pidl.c @@ -810,6 +810,26 @@ HRESULT WINAPI SHGetSpecialFolderLocation( hr = NOERROR; break; + case CSIDL_NETWORK: + *ppidl = _ILCreateNetwork (); + hr = NOERROR; + break; + + case CSIDL_CONTROLS: + *ppidl = _ILCreateControl (); + hr = NOERROR; + break; + + case CSIDL_PRINTERS: + *ppidl = _ILCreatePrinter (); + hr = NOERROR; + break; + + case CSIDL_BITBUCKET: + *ppidl = _ILCreateBitBucket (); + hr = NOERROR; + break; + default: if (SHGetSpecialFolderPathA(hwndOwner, szPath, nFolder, TRUE)) { @@ -1045,6 +1065,26 @@ LPITEMIDLIST WINAPI _ILCreateIExplore() return _ILCreate(PT_MYCOMP, &IID_IExplore, sizeof(GUID)); } +LPITEMIDLIST WINAPI _ILCreateControl() +{ TRACE_(pidl)("()\n"); + return _ILCreate(PT_SPECIAL, &IID_Control, sizeof(GUID)); +} + +LPITEMIDLIST WINAPI _ILCreatePrinter() +{ TRACE_(pidl)("()\n"); + return _ILCreate(PT_SPECIAL, &IID_Printer, sizeof(GUID)); +} + +LPITEMIDLIST WINAPI _ILCreateNetwork() +{ TRACE_(pidl)("()\n"); + return _ILCreate(PT_MYCOMP, &IID_Network, sizeof(GUID)); +} + +LPITEMIDLIST WINAPI _ILCreateBitBucket() +{ TRACE_(pidl)("()\n"); + return _ILCreate(PT_MYCOMP, &IID_BitBucket, sizeof(GUID)); +} + LPITEMIDLIST WINAPI _ILCreateDrive( LPCSTR lpszNew) { char sTemp[4]; lstrcpynA (sTemp,lpszNew,4); @@ -1529,3 +1569,4 @@ BOOL WINAPI _ILGetExtension (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize) return TRUE; } + diff --git a/dlls/shell32/pidl.h b/dlls/shell32/pidl.h index bc2bcf7570b..0f8a27b3ddb 100644 --- a/dlls/shell32/pidl.h +++ b/dlls/shell32/pidl.h @@ -29,6 +29,8 @@ * ! size * ---------------------------------------------------------------- * my computer 0x1F/20 mycomp (2) (usual) +* network 0x1F mycomp +* bitbucket 0x1F mycomp * drive 0x23/25 drive (usual) * drive 0x25/25 drive (lnk/persistant) * drive 0x29/25 drive @@ -117,12 +119,6 @@ typedef struct tagPIDLDATA * return value is strlen() */ DWORD WINAPI _ILGetDrive(LPCITEMIDLIST,LPSTR,UINT16); -/* -DWORD WINAPI _ILGetItemText(LPCITEMIDLIST,LPSTR,UINT16); -DWORD WINAPI _ILGetFolderText(LPCITEMIDLIST,LPSTR,DWORD); -DWORD WINAPI _ILGetValueText(LPCITEMIDLIST,LPSTR,DWORD); -DWORD WINAPI _ILGetPidlPath(LPCITEMIDLIST,LPSTR,DWORD); -*/ /* * getting special values from simple pidls @@ -149,6 +145,10 @@ BOOL WINAPI _ILIsPidlSimple ( LPCITEMIDLIST pidl); LPITEMIDLIST WINAPI _ILCreateDesktop(void); LPITEMIDLIST WINAPI _ILCreateMyComputer(void); LPITEMIDLIST WINAPI _ILCreateIExplore(void); +LPITEMIDLIST WINAPI _ILCreateControl(void); +LPITEMIDLIST WINAPI _ILCreatePrinter(void); +LPITEMIDLIST WINAPI _ILCreateNetwork(void); +LPITEMIDLIST WINAPI _ILCreateBitBucket(void); LPITEMIDLIST WINAPI _ILCreateDrive(LPCSTR); LPITEMIDLIST WINAPI _ILCreateFolder(WIN32_FIND_DATAA * stffile); LPITEMIDLIST WINAPI _ILCreateValue(WIN32_FIND_DATAA * stffile); diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c index b72ec05070f..25d9e788b29 100644 --- a/dlls/shell32/shell32_main.c +++ b/dlls/shell32/shell32_main.c @@ -124,6 +124,11 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, if (flags & SHGFI_PIDL) { pidl = (LPCITEMIDLIST) path; + if (!pidl ) + { + ERR_(shell)("pidl is null!\n"); + return FALSE; + } } else if (!(flags & SHGFI_USEFILEATTRIBUTES)) { diff --git a/include/shlguid.h b/include/shlguid.h index 039b5dd6374..a17dcaf412b 100644 --- a/include/shlguid.h +++ b/include/shlguid.h @@ -33,9 +33,13 @@ DEFINE_GUID (IID_IDockingWindowSite, 0x2A342FC2L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x /**************************************************************************** * undocumented stuff */ -/* the next two IID's are the namespace elements in the desktop folder */ +/* the next IID's are the namespace elements of the pidls */ DEFINE_GUID (IID_MyComputer, 0x20D04FE0L, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID (IID_IExplore, 0x871C5380L, 0x42A0, 0x1069, 0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID (IID_Control, 0x23EC2020L, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID (IID_Printer, 0x2227A280L, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID (IID_Network, 0x208D2C60L, 0x3AEA, 0x1069, 0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID (IID_BitBucket, 0x645FF040L, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E); DEFINE_GUID (CLSID_PaperBin, 0x645FF040L, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E); #endif /* __WINE_SHLGUID_H */