Francois Gouget : winedump: Dump the raw data when finding an unknown block in an lnk file.

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


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

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

winedump: Dump the raw data when finding an unknown block in an lnk file.

---

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

diff --git a/tools/winedump/lnk.c b/tools/winedump/lnk.c
index 1da0176..c63a1c6 100644
--- a/tools/winedump/lnk.c
+++ b/tools/winedump/lnk.c
@@ -336,6 +336,58 @@ static int dump_advertise_info(const char *type)
     return 0;
 }
 
+static int dump_raw_block(void)
+{
+    const DATABLOCK_HEADER *bhdr;
+    int data_size;
+
+    bhdr = fetch_block();
+    if (!bhdr)
+    {
+        printf("\n");
+        printf("No end block!\n");
+        return 0;
+    }
+    if (!bhdr->cbSize)
+        return 0;
+
+    printf("Raw Block\n");
+    printf("---------\n\n");
+    printf("size    = %d\n", bhdr->cbSize);
+    printf("magic   = %x\n", bhdr->dwSignature);
+
+    data_size=bhdr->cbSize-sizeof(*bhdr);
+    if (data_size > 0)
+    {
+        unsigned int i;
+        const unsigned char *data;
+
+        printf("data    = ");
+        data=(const unsigned char*)bhdr+sizeof(*bhdr);
+        while (data_size > 0)
+        {
+            for (i=0; i < 16; i++)
+            {
+                if (i < data_size)
+                    printf("%02x ", data[i]);
+                else
+                    printf("   ");
+            }
+            for (i=0; i < data_size && i < 16; i++)
+                printf("%c", (data[i] >= 32 && data[i] < 128 ? data[i] : '.'));
+            printf("\n");
+            data_size-=16;
+            if (data_size <= 0)
+                break;
+            data+=16;
+            printf("          ");
+        }
+    }
+    printf("\n");
+
+    return 1;
+}
+
 static const GUID CLSID_ShellLink = {0x00021401L, 0, 0, {0xC0,0,0,0,0,0,0,0x46}};
 
 enum FileSig get_kind_lnk(void)
@@ -429,4 +481,5 @@ void lnk_dump(void)
         dump_advertise_info("product");
     if (hdr->dwFlags & SLDF_HAS_DARWINID)
         dump_advertise_info("msi string");
+    while (dump_raw_block());
 }




More information about the wine-cvs mailing list