程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 7開發:UAC數據重定向 - Win32 Native

Windows 7開發:UAC數據重定向 - Win32 Native

編輯:關於.NET

目標

本動手實驗中,您將會學習如何:

• 故障排除一個文件重定向 問題

• 使用Process Monitor查找引起問題的根本原因

系統要求

您必須符合下面的條件以完成這次實驗:

• Microsoft Visual Studio   2008

• Microsoft Windows 7

• Windows 7 SDK

• Microsoft TechNet上的Process Monitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx )

練習: 體驗用戶帳戶控制虛擬化

在這個練習中,您將會診斷一 個損壞的本機的 (Win32) C++ 應用程序顯示了文件重定向到VirtualStore文件夾。

隨後您將會添加一個UAC清單文件並編譯應用程序,從而使它支持UAC。您將會注意到它並沒 有被重定向,而是當對Program Files文件進行寫入操作時將會被阻止並引起“拒絕訪 問”錯誤。

最後,您將對應用程序進行修改,即將文件存儲到應用程序數據 (ProgramData)文件夾,來解決這一問題。

任務1 – 無清單文件情況下,運 行應用程序

在這個任務中,您將會在沒有清單文件的情況下運行應用程序,以模仿一 個舊應用程序並觸發UAC虛擬化引擎。在Visual Studio 2008中創建一個新應用程序的時候, 還會默認自動嵌入一個包括UAC節點的清單文件。

1.確保您的動手實驗運行在一個支 持UAC的系統上:

a.在開始菜單中

i.打開搜索

ii.輸入 UAC

iii.在搜索列表中點擊“改變用戶帳戶控制設置”

b.用戶帳戶控制設 置對話框出現了。確定UAC沒有被禁用。

i.設置UAC滑塊處於默認位置(見下圖)

ii.點擊 OK

2.轉到 包含DataRedirection解決方案的文件夾

3.在Visual Studio中打開該解決方案

a.確定您沒有使用管理員權限運行Visual Studio

b.如果Visual Studio是以 管理員權限運行的,那麼標題欄上會顯示“Visual Studio (Administrator) ”

4.將BrokenAppNative項目設置為開始項目:

a.右鍵點擊解決方案窗 口中的項目並選擇設為啟動項目

5.設置生成目標為x86 (Debug or Release; Debug recommended):

幫助

這樣做的原因是對x64應用程序而言,不論有沒有清單文件虛擬化都是關閉的。

6.右鍵點擊解決方案窗口中的BrokenAppNative項目並選擇屬性:

a.默認的, Visual Studio 2008會在UAC的一個節點中對項目進行配置;我們將會關閉這一設置以表明一 個滯後的應用程序是如何運行的。

7.在屬性中:

a.展開配置屬性

b.展開Linker

c.選擇清單文件

d.改變啟用用戶帳戶控制(UAC)選擇為No

e.點擊 OK

8.轉到BrokenAppNative.cpp文件並查看SaveFile和LoadFile 方法

9.請注意在 MakeDataFilePath 中路徑是如何生成的:

a.數據文件路徑保存在Program Files文件 夾下

b.SHGetKnownFolderPath的FOLDERID_ProgramFiles參數獲得 Program Files 文 件夾的路徑

c.如果沒有子文件夾的話,首先會在Program Files 下創建一個子文件夾

d.然後會在該子文件夾下創建一個文件(SomeFile.txt)

10.生成項目並運行 。請再一次確定您沒有以管理員的身份運行。

11.打開任務管理器並點擊進程選項卡 。

a.在View的菜單中,選擇Select Columns

b.彈出Select Process Page Columns對話框

c.選中復選框中的User Account Control (UAC) Virtualization,如 下圖中紅框所示(確定您選中了那個選項)

d.點擊 OK

12.注意 UAC虛擬化列,確定您的進程為啟用狀態:

13.在編 輯框中輸入些內容然後保存。這個操作應該成功;也就是說不會得到一個錯誤。

14.試著 轉到路徑所指向的地方(例如,64位Windows 7中的 C:\Program Files (x86)\BrokenApp 或 者86位Windows上的 C:\Program Files\BrokenApp)

注意

您在Program Files 中肯定找不到BrokenApp,因為寫入文件的操作會被重定向到 VirtualStore 文件夾。

任務2 – 找出問題

在這個任務中,您將會通過不同的步驟來確定您的 應用程序正在應用UAC虛擬化。

1.從Microsoft TechNet 網站下載並解壓進程管理器 (Process Monitor) (http://technet.microsoft.com/en- us/sysinternals/bb896645.aspx ).

2.啟動進程管理器

3.啟動 BrokenAppNative應用程序

4.點擊第三個工具欄按鈕確定進程管理器正在進行捕獲。 您也可以通過按CTRL-E 來開啟/關閉捕獲。

5.在 BrokenAppNative應用程序中,在文本框中輸入一些文本。

6.���BrokenAppNative應用程序中點擊保存。

7.您可 以通過點擊進程管理器的工具欄中的第三個按鈕停止捕獲(或按CTRL-E)。

8.在進程 管理器中,在工具菜單中,點擊進程樹。進程樹對話框將會彈出,如下所示:

9.在樹中 找到BrokenAppNative.exe並雙擊。

10.點擊關閉以關閉進程樹對話框。

11.在 進程管理器中右鍵點擊BrokenAppNative進程名

12.點擊包含BrokenAppNative。這將 會篩選出其他所有事件:

幫助

您能看見BrokenAppNative試圖創建C:\ProgramFiles (x86) \BrokenApp\SomeFile.txt文件。這個文件被重定向到了VirtualStore文件夾,這也是數據文 件最終的存放的地方。

注意結果列。 “REPARSE”行就是最原始的操作。 “SUCCESS”行就是重定向操作。

任務3 – 添加一個UAC 清單文件

在這個任務中,您將會添加一個清單文件來使應用程序支持UAC。標記您的應用程序 為支持UAC的應用程序,您要聲明應用程序無需寫入訪問受保護的位置。UAC虛擬化將不會應 用到您的應用程序。

1.在項目窗口中右鍵點擊BrokenAppNative項目並選擇屬性。

2.展開配置屬性(Configuration Properties)。

3.展開Linker。

4. 選擇清單文件。

5.改變啟用用戶帳戶控制(UAC)為Yes

6.點擊 OK.

7.重新生成應用程序。

8.運行應用程序

9.查看任務管理器,您將會注意到 虛擬化現在被禁用了:

幫助

這是由於當前清單文件中的UAC節點將應用程序標記為了支持UAC。

10.在編輯框中輸入一些文本並點擊保存。您應該得到下面的錯誤:

幫助

由於UAC虛擬化被關閉了,所以寫入受保護的位置時會收到錯誤。

任務 4 – 修改拒絕訪問錯誤

通過在清單文件中包含UAC節點,您聲明了在Windows 7中 您的應用程序支持UAC,因此可以阻止在受保護的地方進行寫入操作。在這個任務中您將改變 文本文件的存儲地點並修復拒絕訪問錯誤。

1.回到Visual Studio

2.在 BrokenAppNative.cpp中找到MakeDataFilePath方法

3.注釋掉方法頂部包含 FOLDERID_ProgramFiles的那行代碼。

4.對包含FOLDERID_ProgramData的代碼行取消 注釋。

5.重新生成並運行應用程序。

您現在修復了重定向的問題並保存了您 的數據文件到正確的地方。

幫助

為了在Visual Studio 2008中實現重定向,您必須在清單文件中關閉UAC。要這麼做 :

Visual Studio中的C#項目:

1.點擊項目菜單

2.點擊項目屬性

3.在應用程序選項卡中,在資源選項卡中,選擇圖片和清單文件。

4.選擇不 包含清單文件創建應用程序。

5.點擊OK.

Visual Studio中的C++項 目:

1.點擊項目菜單

2.點擊項目屬性

3.展開配置屬性(Configuration Properties)

4.展開Linker.

5.選擇清單文件。

5.改變啟用用戶帳戶 控制(UAC)為No

6.點擊 OK.

這裡關閉UAC目的只是為了說明。所有可執行的 都應該包含在清單文件中的UAC節點中。如果清單文件包含了UAC節點,Windows將不會把應用 程序看做滯後的應用程序並且不會啟用重定向。寫入Program Files文件夾會引起拒絕訪問錯 誤。

總結

在這個實驗中您使用了進程管理工具來分析了一個UAC重定向的問題 ,並通過修改代碼並保存文件到正確的位置(ProgramData)解決解決了它。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved