Francois Gouget : winedump: Add support for dumping SZ_LINK and SPECIAL_FOLDER data blocks.

Alexandre Julliard julliard at winehq.org
Mon Feb 4 08:42:49 CST 2008


Module: wine
Branch: master
Commit: fa9950f93e70b6358a69e85fa3f5e9671b5f7535
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=fa9950f93e70b6358a69e85fa3f5e9671b5f7535

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Sat Jan 26 03:15:52 2008 +0100

winedump: Add support for dumping SZ_LINK and SPECIAL_FOLDER data blocks.

---

 tools/winedump/lnk.c |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/tools/winedump/lnk.c b/tools/winedump/lnk.c
index 590a9d1..53d2a55 100644
--- a/tools/winedump/lnk.c
+++ b/tools/winedump/lnk.c
@@ -63,6 +63,8 @@ typedef enum {
     SLDF_RESERVED = 0x80000000,
 } SHELL_LINK_DATA_FLAGS;
 
+#define EXP_SZ_LINK_SIG         0xa0000001
+#define EXP_SPECIAL_FOLDER_SIG  0xa0000005
 #define EXP_DARWIN_ID_SIG       0xa0000006
 #define EXP_SZ_ICON_SIG         0xa0000007
 
@@ -116,6 +118,14 @@ typedef struct _LOCAL_VOLUME_INFO
     DWORD dwVolLabelOfs;
 } LOCAL_VOLUME_INFO;
 
+typedef struct
+{
+    DWORD cbSize;
+    DWORD dwSignature;
+    DWORD idSpecialFolder;
+    DWORD cbOffset;
+} EXP_SPECIAL_FOLDER;
+
 typedef struct lnk_string_tag
 {
     unsigned short size;
@@ -288,6 +298,17 @@ static int base85_to_guid( const char *str, LPGUID guid )
     return 1;
 }
 
+static int dump_special_folder_block(const DATABLOCK_HEADER* bhdr)
+{
+    const EXP_SPECIAL_FOLDER *sfb = (const EXP_SPECIAL_FOLDER*)bhdr;
+    printf("Special folder block\n");
+    printf("--------------------\n\n");
+    printf("folder  = 0x%04x\n", sfb->idSpecialFolder);
+    printf("offset  = %d\n", sfb->cbOffset);
+    printf("\n");
+    return 0;
+}
+
 static int dump_sz_block(const DATABLOCK_HEADER* bhdr, const char* label)
 {
     const LINK_SZ_BLOCK *szp = (const LINK_SZ_BLOCK*)bhdr;
@@ -481,6 +502,12 @@ void lnk_dump(void)
             break;
         switch (bhdr->dwSignature)
         {
+        case EXP_SZ_LINK_SIG:
+            dump_sz_block(bhdr, "exp.link");
+            break;
+        case EXP_SPECIAL_FOLDER_SIG:
+            dump_special_folder_block(bhdr);
+            break;
         case EXP_SZ_ICON_SIG:
             dump_sz_block(bhdr, "icon");
             break;




More information about the wine-cvs mailing list