Blog Home  Home Feed your aggregator (RSS 2.0)  
kevin Mocha - Tricks
Bookmarks collected from web.
 
 Wednesday, September 10, 2008

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1439749&SiteID=1 (Might work)

#include "stdafx.h" // includes <tchar.h>

#include <windows.h>
#include <shobjidl.h> // ShellLink
#include <shlobj.h> // IShellLinkDataList (build on Vista use shobjidl.h)
#include <objbase.h> // CoInitialize, CoInitializeEx, CoUninitialize

int _tmain(int argc, _TCHAR* argv[])
{
  HRESULT       result;
  WCHAR         wbuf[MAX_PATH];
  IShellLink*   link;
  IPersistFile* file;
  char    szFile[MAX_PATH];
  char    szProgramMenuFolder[MAX_PATH];

  // SHOULD use CoInitializeEx, but compiler can't find it.
  result = CoInitialize(NULL); // For Ex: 2nd param: COINIT_APARTMENTTHREADED
 
  // Create IShellLink object
  result = CoCreateInstance(CLSID_ShellLink,
      NULL,
      CLSCTX_INPROC_SERVER,
      IID_IShellLink,
      (void**)&link);
  if (result != S_OK) {
    CoUninitialize();
    return -1;
  }

  // Retreive the IPersistFile
  result = link->QueryInterface(IID_IPersistFile, (void**)&file);
  if (result != S_OK) {
    link->Release();
    CoUninitialize();
    return -2;
  }
  // SHOULD get from registry.
  strcpy(szProgramMenuFolder, "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\");

  // DEBUG
  strcpy(szFile, szProgramMenuFolder);
  // SHOULD use your folder and shortcut name.
  strcat(szFile, "Program Shortcut Folder\\Shortcut.lnk");
 
  // Convert the filename
  MultiByteToWideChar(CP_ACP, 0, szFile, -1, wbuf, sizeof(wbuf)-1);

  // Load the link data from the file
  result = file->Load(wbuf, STGM_READ);
  if (result != S_OK) {
    file->Release();
    link->Release();
    CoUninitialize();
    return -3;
  }

  // Look for IShellLinkDataList interface
  IShellLinkDataList* pdl;

  result = link->QueryInterface(IID_IShellLinkDataList, (void**)&pdl);
  if (result != S_OK) {
    file->Release();
    link->Release();
    CoUninitialize();
    return -4; // Where did IShellLinkDataList go?
  }

  DWORD dwFlags = 0;

  result = pdl->GetFlags(&dwFlags);
  if (result != S_OK) {
    pdl->Release();
    file->Release();
    link->Release();
    CoUninitialize();
    return -5;
  }

  // Only set SLDF_RUNAS_USER if it's not set, otherwise
  // SetFlags returns an error.
  if ((SLDF_RUNAS_USER & dwFlags) != SLDF_RUNAS_USER) {
    result = pdl->SetFlags(SLDF_RUNAS_USER | dwFlags);
    if (result != S_OK) {
      pdl->Release();
      file->Release();
      link->Release();
      CoUninitialize();
      return -6;
    }
  }
  else {
    pdl->Release();
    file->Release();
    link->Release();
    CoUninitialize();
    return 0;
  }

  result = file->Save(NULL, true);
  if (result != S_OK) {
    pdl->Release();
    file->Release();
    link->Release();
    CoUninitialize();
    return -8;
  }
  result = file->SaveCompleted(NULL);
  if (result != S_OK) {
    pdl->Release();
    file->Release();
    link->Release();
    CoUninitialize();
    return -9;
  }

  pdl->Release();
  file->Release();
  link->Release();
  CoUninitialize();
  return ERROR_SUCCESS;
}

Wednesday, September 10, 2008 6:36:58 PM UTC  #    Comments [0]    |   |  Trackback
Copyright © 2009 Kevin Mocha. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: