From 6f5a32543dce6a452fb852ddffdd8f85f7af69af Mon Sep 17 00:00:00 2001
From: didroe <didroe@0a9a9e18-0b8b-11df-b730-f17d7b42d8b9>
Date: Wed, 27 Oct 2010 20:11:05 +0000
Subject: [PATCH] Added info at top of file. Removed project dependencies.
 Issue 2 - Open in read only mode when only displaying current AppId.

---
 Win7AppId.cpp | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/Win7AppId.cpp b/Win7AppId.cpp
index 9f8e38b..26b3db9 100755
--- a/Win7AppId.cpp
+++ b/Win7AppId.cpp
@@ -1,11 +1,15 @@
-// Win7AppId.cpp : Defines the entry point for the console application.
 //
-
-#include "stdafx.h"
+// Win7AppId
+// Author: David Roe (didroe)
+// The code's a bit rough and ready but it does the job
+//
+// Compile with VS 2010 express using command:
+//     cl /EHsc /D _UNICODE Win7AppId.cpp /link ole32.lib
 
 #include <windows.h>
 #include <shobjidl.h>
 #include <propkey.h>
+#include <tchar.h>
 
 #include <iostream>
 
@@ -36,19 +40,24 @@ int _tmain(int argc, _TCHAR* argv[])
 			"Failed to create ShellLink object");
 	
 	IPersistFile* file; 
-    doOrDie(link->QueryInterface(IID_PPV_ARGS(&file)),
+	doOrDie(link->QueryInterface(IID_PPV_ARGS(&file)),
 			"Failed to obtain PersistFile interface"); 
 
-	doOrDie(file->Load(argv[1], STGM_READWRITE),
-		    "Failed to load shortcut file");
-
+	if (argc > 2) {
+		doOrDie(file->Load(argv[1], STGM_READWRITE),
+				"Failed to load shortcut file");
+	} else {
+		doOrDie(file->Load(argv[1], STGM_READ | STGM_SHARE_DENY_NONE),
+				"Failed to load shortcut file");
+	}
+    
 	IPropertyStore* store; 
-    doOrDie(link->QueryInterface(IID_PPV_ARGS(&store)),
+	doOrDie(link->QueryInterface(IID_PPV_ARGS(&store)),
 			"Failed to obtain PropertyStore interface"); 
 
 	PROPVARIANT pv;
 	doOrDie(store->GetValue(PKEY_AppUserModel_ID, &pv),
-		    "Failed to retrieve AppId");
+			"Failed to retrieve AppId");
 	
 	if (pv.vt != VT_EMPTY) {
 		if (pv.vt != VT_LPWSTR) {
@@ -70,6 +79,9 @@ int _tmain(int argc, _TCHAR* argv[])
 
 		doOrDie(store->SetValue(PKEY_AppUserModel_ID, pv),
 				"Failed to set AppId");
+
+        // Not sure if we need to do this
+        pv.pwszVal = NULL;
 		PropVariantClear(&pv);
 
 		doOrDie(store->Commit(),
@@ -85,4 +97,3 @@ int _tmain(int argc, _TCHAR* argv[])
 
 	return 0;
 }
-
