| 1 | /* $Id: pidl.h,v 1.4 2000-03-28 15:28:45 cbratschi Exp $ */ | 
|---|
| 2 |  | 
|---|
| 3 | /* | 
|---|
| 4 | * Win32 SHELL32 for OS/2 | 
|---|
| 5 | * | 
|---|
| 6 | * Copyright 1999 Patrick Haller (haller@zebra.fh-weingarten.de) | 
|---|
| 7 | * Project Odin Software License can be found in LICENSE.TXT | 
|---|
| 8 | * | 
|---|
| 9 | */ | 
|---|
| 10 |  | 
|---|
| 11 | /* | 
|---|
| 12 | * internal pidl functions | 
|---|
| 13 | * 1998 <juergen.schmied@metronet.de> | 
|---|
| 14 | * | 
|---|
| 15 | * DO NOT use this definitions outside the shell32.dll ! | 
|---|
| 16 | * | 
|---|
| 17 | * The contents of a pidl should never used from a application | 
|---|
| 18 | * directly. | 
|---|
| 19 | * | 
|---|
| 20 | * This stuff is used from SHGetFileAttributes, ShellFolder | 
|---|
| 21 | * EnumIDList and ShellView. | 
|---|
| 22 | */ | 
|---|
| 23 |  | 
|---|
| 24 | #ifndef __WINE_PIDL_H | 
|---|
| 25 | #define __WINE_PIDL_H | 
|---|
| 26 |  | 
|---|
| 27 |  | 
|---|
| 28 | /***************************************************************************** | 
|---|
| 29 | * Includes                                                                  * | 
|---|
| 30 | *****************************************************************************/ | 
|---|
| 31 |  | 
|---|
| 32 | #include "shlobj.h" | 
|---|
| 33 |  | 
|---|
| 34 | /* | 
|---|
| 35 | * the pidl does cache fileattributes to speed up SHGetAttributes when | 
|---|
| 36 | * displaying a big number of files. | 
|---|
| 37 | * | 
|---|
| 38 | * a pidl of NULL means the desktop | 
|---|
| 39 | * | 
|---|
| 40 | * The structure of the pidl seems to be a union. The first byte of the | 
|---|
| 41 | * PIDLDATA desribes the type of pidl. | 
|---|
| 42 | * | 
|---|
| 43 | *       object        ! first byte /  ! format       ! living space | 
|---|
| 44 | *                     ! size | 
|---|
| 45 | *       ---------------------------------------------------------------- | 
|---|
| 46 | *       my computer     0x1F/20         mycomp (2)      (usual) | 
|---|
| 47 | *       network         0x1F            mycomp | 
|---|
| 48 | *       bitbucket       0x1F            mycomp | 
|---|
| 49 | *       drive           0x23/25         drive           (usual) | 
|---|
| 50 | *       drive           0x25/25         drive           (lnk/persistant) | 
|---|
| 51 | *       drive           0x29/25         drive | 
|---|
| 52 | *       shell extension 0x2E            mycomp | 
|---|
| 53 | *       drive           0x2F            drive           (lnk/persistant) | 
|---|
| 54 | *       folder/file     0x30            folder/file (1) (lnk/persistant) | 
|---|
| 55 | *       folder          0x31            folder          (usual) | 
|---|
| 56 | *       value           0x32            file            (usual) | 
|---|
| 57 | *       workgroup       0x41            network (3) | 
|---|
| 58 | *       computer        0x42            network (4) | 
|---|
| 59 | *       whole network   0x47            network (5) | 
|---|
| 60 | *       MSITStore       0x61            htmlhlp (7) | 
|---|
| 61 | *       history/favorites 0xb1          file | 
|---|
| 62 | *       share           0xc3            network (6) | 
|---|
| 63 | * | 
|---|
| 64 | * guess: the persistant elements are non tracking | 
|---|
| 65 | * | 
|---|
| 66 | * (1) dummy byte is used, attributes are empty | 
|---|
| 67 | * (2) IID_MyComputer = 20D04FE0L-3AEA-1069-A2D8-08002B30309D | 
|---|
| 68 | * (3) two strings       "workgroup" "microsoft network" | 
|---|
| 69 | * (4) one string        "\\sirius" | 
|---|
| 70 | * (5) one string        "whole network" | 
|---|
| 71 | * (6) one string        "\\sirius\c" | 
|---|
| 72 | * (7) contains string   "mk:@MSITStore:C:\path\file.chm::/path/filename.htm" | 
|---|
| 73 | *               GUID    871C5380-42A0-1069-A2EA-08002B30309D | 
|---|
| 74 | */ | 
|---|
| 75 |  | 
|---|
| 76 | #define PT_DESKTOP      0x00 /* internal */ | 
|---|
| 77 | #define PT_MYCOMP       0x1F | 
|---|
| 78 | #define PT_DRIVE        0x23 | 
|---|
| 79 | #define PT_DRIVE2       0x25 | 
|---|
| 80 | #define PT_DRIVE3       0x29 | 
|---|
| 81 | #define PT_SPECIAL      0x2E | 
|---|
| 82 | #define PT_DRIVE1       0x2F | 
|---|
| 83 | #define PT_FOLDER1      0x30 | 
|---|
| 84 | #define PT_FOLDER       0x31 | 
|---|
| 85 | #define PT_VALUE        0x32 | 
|---|
| 86 | #define PT_WORKGRP      0x41 | 
|---|
| 87 | #define PT_COMP         0x42 | 
|---|
| 88 | #define PT_NETWORK      0x47 | 
|---|
| 89 | #define PT_IESPECIAL    0xb1 | 
|---|
| 90 | #define PT_SHARE        0xc3 | 
|---|
| 91 |  | 
|---|
| 92 | #include "pshpack1.h" | 
|---|
| 93 | typedef BYTE PIDLTYPE; | 
|---|
| 94 |  | 
|---|
| 95 | typedef struct tagPIDLDATA | 
|---|
| 96 | {       PIDLTYPE type;                  /*00*/ | 
|---|
| 97 | union | 
|---|
| 98 | { struct | 
|---|
| 99 | { BYTE dummy;                 /*01*/ | 
|---|
| 100 | GUID guid;                  /*02*/ | 
|---|
| 101 | BYTE dummy1;                /*18*/ | 
|---|
| 102 | } mycomp; | 
|---|
| 103 | struct | 
|---|
| 104 | { CHAR szDriveName[20];       /*01*/ | 
|---|
| 105 | DWORD dwUnknown;            /*21*/ | 
|---|
| 106 | /* the drive seems to be 25 bytes every time */ | 
|---|
| 107 | } drive; | 
|---|
| 108 | struct | 
|---|
| 109 | { BYTE dummy;                 /*01 is 0x00 for files or dirs */ | 
|---|
| 110 | DWORD dwFileSize;           /*02*/ | 
|---|
| 111 | WORD uFileDate;             /*06*/ | 
|---|
| 112 | WORD uFileTime;             /*08*/ | 
|---|
| 113 | WORD uFileAttribs;          /*10*/ | 
|---|
| 114 | CHAR szNames[1];            /*12*/ | 
|---|
| 115 | /* Here are comming two strings. The first is the long name. | 
|---|
| 116 | The second the dos name when needed or just 0x00 */ | 
|---|
| 117 | } file, folder, generic; | 
|---|
| 118 | struct | 
|---|
| 119 | { WORD dummy;         /*01*/ | 
|---|
| 120 | CHAR szNames[1];    /*03*/ | 
|---|
| 121 | } network; | 
|---|
| 122 | struct | 
|---|
| 123 | { WORD dummy;         /*01*/ | 
|---|
| 124 | DWORD dummy1;       /*02*/ | 
|---|
| 125 | CHAR szName[1];     /*06*/ /* teminated by 0x00 0x00 */ | 
|---|
| 126 | } htmlhelp; | 
|---|
| 127 | }u; | 
|---|
| 128 | } PIDLDATA, *LPPIDLDATA; | 
|---|
| 129 | #include "poppack.h" | 
|---|
| 130 |  | 
|---|
| 131 | /* | 
|---|
| 132 | * getting special values from simple pidls | 
|---|
| 133 | */ | 
|---|
| 134 | DWORD   WINAPI _ILSimpleGetText         (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 135 | BOOL    WINAPI _ILGetFileDate           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 136 | DWORD   WINAPI _ILGetFileSize           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 137 | BOOL    WINAPI _ILGetExtension          (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 138 | void    WINAPI _ILGetFileType           (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 139 | DWORD   WINAPI _ILGetFileAttributes     (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 140 | DWORD   WINAPI _ILGetFileSizeKB         (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize); | 
|---|
| 141 |  | 
|---|
| 142 | BOOL    WINAPI _ILGetFileDateTime       (LPCITEMIDLIST pidl, FILETIME *ft); | 
|---|
| 143 | DWORD   WINAPI _ILGetDrive              (LPCITEMIDLIST, LPSTR, UINT16); | 
|---|
| 144 |  | 
|---|
| 145 | /* | 
|---|
| 146 | * testing simple pidls | 
|---|
| 147 | */ | 
|---|
| 148 | BOOL    WINAPI _ILIsDesktop             (LPCITEMIDLIST pidl); | 
|---|
| 149 | BOOL    WINAPI _ILIsMyComputer          (LPCITEMIDLIST pidl); | 
|---|
| 150 | BOOL    WINAPI _ILIsDrive               (LPCITEMIDLIST pidl); | 
|---|
| 151 | BOOL    WINAPI _ILIsFolder              (LPCITEMIDLIST pidl); | 
|---|
| 152 | BOOL    WINAPI _ILIsValue               (LPCITEMIDLIST pidl); | 
|---|
| 153 | BOOL    WINAPI _ILIsSpecialFolder       (LPCITEMIDLIST pidl); | 
|---|
| 154 | BOOL    WINAPI _ILIsPidlSimple          (LPCITEMIDLIST pidl); | 
|---|
| 155 |  | 
|---|
| 156 | /* | 
|---|
| 157 | * simple pidls from strings | 
|---|
| 158 | */ | 
|---|
| 159 | LPITEMIDLIST    WINAPI _ILCreate        (PIDLTYPE,LPCVOID,UINT16); | 
|---|
| 160 |  | 
|---|
| 161 | LPITEMIDLIST    WINAPI _ILCreateDesktop         (void); | 
|---|
| 162 | LPITEMIDLIST    WINAPI _ILCreateMyComputer      (void); | 
|---|
| 163 | LPITEMIDLIST    WINAPI _ILCreateIExplore        (void); | 
|---|
| 164 | LPITEMIDLIST    WINAPI _ILCreateControl         (void); | 
|---|
| 165 | LPITEMIDLIST    WINAPI _ILCreatePrinter         (void); | 
|---|
| 166 | LPITEMIDLIST    WINAPI _ILCreateNetwork         (void); | 
|---|
| 167 | LPITEMIDLIST    WINAPI _ILCreateBitBucket       (void); | 
|---|
| 168 | LPITEMIDLIST    WINAPI _ILCreateDrive           (LPCSTR); | 
|---|
| 169 | LPITEMIDLIST    WINAPI _ILCreateFolder          (WIN32_FIND_DATAA * stffile); | 
|---|
| 170 | LPITEMIDLIST    WINAPI _ILCreateValue           (WIN32_FIND_DATAA * stffile); | 
|---|
| 171 | LPITEMIDLIST    WINAPI _ILCreateSpecial         (LPCSTR szGUID); | 
|---|
| 172 |  | 
|---|
| 173 | /* | 
|---|
| 174 | * helper functions (getting struct-pointer) | 
|---|
| 175 | */ | 
|---|
| 176 | LPPIDLDATA      WINAPI _ILGetDataPointer        (LPCITEMIDLIST); | 
|---|
| 177 | LPSTR           WINAPI _ILGetTextPointer        (PIDLTYPE type, LPPIDLDATA pidldata); | 
|---|
| 178 | LPSTR           WINAPI _ILGetSTextPointer       (PIDLTYPE type, LPPIDLDATA pidldata); | 
|---|
| 179 | REFIID          WINAPI _ILGetGUIDPointer        (LPCITEMIDLIST pidl); | 
|---|
| 180 |  | 
|---|
| 181 | /* | 
|---|
| 182 | * debug helper | 
|---|
| 183 | */ | 
|---|
| 184 | #ifdef DEBUG | 
|---|
| 185 | void pdump (LPCITEMIDLIST pidl); | 
|---|
| 186 | #else | 
|---|
| 187 | #define pdump(pidl) | 
|---|
| 188 | #endif | 
|---|
| 189 | //CB: needed in release build | 
|---|
| 190 | BOOL pcheck (LPCITEMIDLIST pidl); | 
|---|
| 191 |  | 
|---|
| 192 | #endif | 
|---|