Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自Windows 7应用程序的SPTI/SCSI操作_Windows_Security_Winapi_Device Driver_Scsi - Fatal编程技术网

来自Windows 7应用程序的SPTI/SCSI操作

来自Windows 7应用程序的SPTI/SCSI操作,windows,security,winapi,device-driver,scsi,Windows,Security,Winapi,Device Driver,Scsi,在更新一些Windows软件以与非存储SCSI设备通信时,我需要一些有关安全问题的帮助 最初的软件是作为DLL为Windows XP编写的,并通过Adaptec的ASPI API与设备进行通信。ASPI实际上没有任何安全性,因此任何用户运行的任何应用程序都可以使用我的DLL与这些设备中的一个进行通信,而且一切都很好 我现在正在使用微软的现代SPTI(SCSI直通接口)API更新该软件,使其与Windows 7一起工作。XP下的SPTI可以正常工作,但Windows7的安全性要严格得多,对于普通用

在更新一些Windows软件以与非存储SCSI设备通信时,我需要一些有关安全问题的帮助

最初的软件是作为DLL为Windows XP编写的,并通过Adaptec的ASPI API与设备进行通信。ASPI实际上没有任何安全性,因此任何用户运行的任何应用程序都可以使用我的DLL与这些设备中的一个进行通信,而且一切都很好

我现在正在使用微软的现代SPTI(SCSI直通接口)API更新该软件,使其与Windows 7一起工作。XP下的SPTI可以正常工作,但Windows7的安全性要严格得多,对于普通用户甚至管理员,SPTI调用会返回一个错误,表明权限不足。如果我使用隐藏的“管理员”帐户登录,我的软件在SPTI上运行良好,但这不是一个可接受的部署选项

以下是我到目前为止研究过的一些备选方案,以降低重写现有代码的难度:

  • 剥离线程并将其权限提升为假装“管理员”,以便它可以与SPTI对话。[我无法使用LogonUser()/ImpersonalLoggeDonUser()/LoadUserProfile()实现此功能;调用LoadUserProfile()失败,SPTI调用也失败,并出现权限不足错误。]
  • 编写具有足够权限与SPTI对话的Windows服务,然后让我的DLL与该服务对话
  • 用户空间(UMDF)驱动程序。这将是一个昂贵的重写,我不清楚UMDF是否支持访问SCSI设备
  • 内核(KMDF)驱动程序。应该可以,但重写的时间更长,成本更高

我希望这里的社区能提供一些智慧/经验/想法,让我的代码在Windows 7下与这个SCSI设备对话,理想情况下不需要重写太多。

我将此作为一个答案,因为它太长了,不能作为评论

我想您已经尝试过设置应用程序的清单,使其在运行时需要提升?请务必注意,您必须提升进程,否则无法提升线程


您建议将其作为服务运行,然后与之通信(命名管道或WCF是可行的选项),这是一个很好的建议。如果您以本地管理员身份运行,那么您的服务将比本地管理员享有更多特权。

谢谢,slugster!我没有尝试在清单中设置执行级别,因为我没有编写应用程序,只是编写与设备接口的库等。我还怀疑这方面的最终客户——这是一个非常注重安全的组织——可能对此不满意。@BobMurphy我理解您的问题与安全有关。您只需要让客户相信,由于Win7的安全性要求有所提高,这是您必须采取的方式。使用命名管道或WCF与服务通信没有安全障碍,客户端应用程序可以作为普通用户运行。但是,如果您正在处理敏感信息,您可能希望保护您的频道(否则其他人可能会创建一个连接到您的服务并使用您的数据的客户端);我的玩具服务现在正在愉快地与SCSI总线对话。其余的都是细节。我希望客户也会同意,所以我把你的答案标记为接受答案。