From 63b7979d1ba096dde9df3afe78e35f47cb774a2b Mon Sep 17 00:00:00 2001 From: Jose Carlos Jesus Date: Sat, 14 Jan 2023 21:00:16 +0000 Subject: [PATCH] Fixed --- dll/win32/shell32/debughlp.cpp | 3 +++ dll/win32/shell32/wine/pidl.c | 32 ++++++++++++++++++++++++++++++++ dll/win32/shell32/wine/pidl.h | 12 ++++++++++++ 3 files changed, 47 insertions(+) diff --git a/dll/win32/shell32/debughlp.cpp b/dll/win32/shell32/debughlp.cpp index 6778418c7a8..20c60e1c63f 100644 --- a/dll/win32/shell32/debughlp.cpp +++ b/dll/win32/shell32/debughlp.cpp @@ -379,6 +379,9 @@ BOOL pcheck( LPCITEMIDLIST pidl ) case PT_YAGUID: case PT_IESPECIAL2: case PT_SHARE: +#ifdef __REACTOS__ + case 0x99: +#endif break; default: ERR("unknown IDLIST %p [%p] size=%u type=%x\n", diff --git a/dll/win32/shell32/wine/pidl.c b/dll/win32/shell32/wine/pidl.c index 2ee8c4650fc..9b7062c7b75 100644 --- a/dll/win32/shell32/wine/pidl.c +++ b/dll/win32/shell32/wine/pidl.c @@ -476,6 +476,31 @@ LPITEMIDLIST WINAPI ILGlobalClone(LPCITEMIDLIST pidl) return newpidl; } +#ifdef __REACTOS__ +BOOL _ILIsNetworkConnection(LPCITEMIDLIST pidl) +{ + TRACE("(%p)\n", pidl); + LPPIDLDATA pData =_ILGetDataPointer(pidl); + + return (pData->type == 0x99); +} + +PNETCONIDSTRUCT _ILGetConnData(PCITEMID_CHILD pidl) +{ + if (!pidl || !pidl->mkid.cb || pidl->mkid.abID[0] != 0x99) + return NULL; + return (PNETCONIDSTRUCT)(&pidl->mkid.abID[0]); +} + +LPCWSTR _ILGetConnName(PCITEMID_CHILD pidl) +{ + PNETCONIDSTRUCT pdata = _ILGetConnData(pidl); + if (!pdata) + return NULL; + return (LPCWSTR)&pidl->mkid.abID[pdata->uNameOffset]; +} +#endif + BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2) { LPPIDLDATA pdata1 = _ILGetDataPointer(pidltemp1); @@ -520,6 +545,13 @@ BOOL _ILHACKCompareSimpleIds(LPCITEMIDLIST pidltemp1, LPCITEMIDLIST pidltemp2) if (!_ILIsDrive(pidltemp1) || !_ILIsDrive(pidltemp2) || pdata1->u.drive.szDriveName[0] != pdata2->u.drive.szDriveName[0]) return FALSE; } +#ifdef __REACTOS__ + else if (_ILIsNetworkConnection(pidltemp1) && _ILIsNetworkConnection(pidltemp2)) + { + if (StrCmpW(_ILGetConnName(pidltemp1), _ILGetConnName(pidltemp2))) + return FALSE; + } +#endif else { return FALSE; diff --git a/dll/win32/shell32/wine/pidl.h b/dll/win32/shell32/wine/pidl.h index e6e0bd6425e..39110f6b2bd 100644 --- a/dll/win32/shell32/wine/pidl.h +++ b/dll/win32/shell32/wine/pidl.h @@ -143,6 +143,18 @@ typedef struct tagPIDLRecycleStruct WCHAR szName[1]; } PIDLRecycleStruct; +#pragma pack(push,4) +typedef struct tagNETCONIDSTRUCT +{ + BYTE type; + GUID guidId; + DWORD Status; + DWORD MediaType; + DWORD dwCharacter; + ULONG_PTR uNameOffset; + ULONG_PTR uDeviceNameOffset; +} NETCONIDSTRUCT, *PNETCONIDSTRUCT; +#pragma pack(pop) #endif /* !__REACTOS__ */ typedef struct tagGUIDStruct -- 2.36.1.windows.1