2012-09-08 30 views
3

在更新用於與非存儲SCSI設備通信的某些Windows軟件時,我需要一些有關安全問題的幫助。Windows 7應用程序中的SPTI/SCSI操作

原始軟件是爲Windows XP編寫的DLL,並通過Adaptec的ASPI API與設備交談。 ASPI並沒有真正的安全性,所以任何用戶運行的任何應用程序都可以使用我的DLL與其中一臺設備通信,而且一切都很順利。

我現在正在更新軟件以使用Microsoft的現代SPTI(SCSI傳遞接口)API與Windows 7一起使用。在XP下SPTI可以正常工作,但Windows 7的安全性更高,對於普通用戶甚至是管理員來說,SPTI調用會返回一個錯誤,指示權限不足。如果我使用隱藏的「管理員」帳戶登錄,我的軟件可以與SPTI一起運行,但這不是可接受的部署選項。

以下是一些備選我已經研究過,到目前爲止,在降低無需重寫現有代碼級別的順序爲:

  • 分拆線程和升級特權被冒充爲「管理員」所以它可以和SPTI交談。 [我一直無法使用LogonUser()/ ImpersonateLoggedOnUser()/ LoadUserProfile();對LoadUserProfile()的調用失敗,並且SPTI調用失敗,並且權限錯誤不足。]
  • 編寫具有足夠權限的Windows服務與SPTI交談,然後讓我的DLL與該服務交談。
  • 用戶空間(UMDF)驅動程序。這將是一個昂貴的重寫,UMDF是否支持訪問SCSI設備還不清楚。
  • 內核(KMDF)驅動程序。應該可以工作,但會是一個更長,更昂貴的重寫。

我希望這裏的社區可以與一些智慧/經驗/想法,這將讓我的代碼聊到這個SCSI設備在Windows 7下幫助,理想而不必重寫太多。

回答

2

我正在招聘這個答案,因爲評論太長了。

我認爲你已經嘗試設置應用程序的清單,以便它在運行時需要提升?重要的是要注意,你必須提升一個進程,AFAIK你不能提升線程。

您的建議是將其作爲服務運行,然後與之通信(命名管道或WCF是可行的選項)是一個很好的選擇。如果您將它作爲Local System運行,那麼您的服務將比本地管理員享有更多特權。

+0

謝謝,sluntster!我沒有嘗試在清單中設置執行級別,因爲我沒有編寫應用程序,只是與設備連接的庫等。我也懷疑最終的客戶 - 這是一個非常注重安全意識的組織 - 可能不會對此感到滿意。 –

+0

@BobMurphy我明白你的問題WRT的安全性。你只需說服客戶,由於Win7的安全性要求提高,這就是你必須做的事情。使用命名管道或WCF與服務進行通信時沒有安全障礙,客戶端應用程序可以以普通用戶身份運行。如果您正在處理敏感信息(否則其他人可能會創建一個連接到您的服務並使用您的數據的客戶端),您可能希望保護您的頻道。 – slugster

+0

您以LocalSystem的身份運行服務的建議的確有竅門;我的玩具服務現在開心地與SCSI總線通話。其餘的是現在的所有細節。我希望客戶也可以,因此我將你的標記作爲公認的答案。 –

相關問題