小编Cla*_*lay的帖子

如何在服务和用户进程之间共享内存?

我有一组Win32应用程序,它们使用CreateFileMapping() 和创建的共享内存段共享信息MapViewOfFile().其中一个应用是系统服务; 其余部分由登录用户启动.在Windows XP上,没有问题.我们将我们的片段命名为"Global\Something",一切都很好.

Vista中的额外安全性(以及假设的Windows 7)似乎阻止了这种架构的运行.不允许普通用户在全局命名空间中创建(Win32错误5)对象.MSDN表明,如果该帐户具有"创建全局"权限,那么一切都应该很好,但实际上似乎并非如此.此外,Vista的"完整性"功能似乎可以防止"低完整性"用户进程访问"高完整性"服务创建的共享内存对象.看起来我应该能够通过一些神奇的SetSecurityDescriptorSacl()咒语解决这个问题,但是我很难学会说话.

所以问题是:在服务和普通用户进程之间使用共享内存段的正确方法什么?

为了取代"只是关闭UAC"的简单回答,我们处于一个相当封闭的环境中,这是不可能的.

编辑:服务和用户进程都需要对段进行读/写访问.

c security winapi windows-vista

7
推荐指数
1
解决办法
8995
查看次数

如何开发不触及硬件的Windows驱动程序?

我需要创建一个模拟不存在的设备的WDM驱动程序.驾驶员需要在O/S靴,打开和关闭通过要被加载SetupDiXXXCreateFile,需要响应DeviceIoControl,等等.

我有驱动程序编码,但XP拒绝加载它.系统事件查看器说:

由于以下错误,MyDevice服务无法启动:无法启动该服务,因为它已被禁用或因为它没有与之关联的已启用设备.

鉴于此,我认为问题出在INF文件中(参见下文).是吗?我该怎么办呢?

;; MyDevice.inf

[Version]
Signature="$Windows 95$"

Class=MyDeviceDeviceClass
ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b}
Provider=%ProviderName%
DriverVer= 12/21/2009,1.0.0.1

[ClassInstall32]
Addreg=Class_AddReg

[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-18"

[DestinationDirs]
MyDevice_Files_Driver = 10,System32\Drivers


[Manufacturer]
%MfgName%=Mfg0

[Mfg0]
%DeviceDesc%=MyDevice_DDI, *MyDevice


[MyDevice_DDI]
CopyFiles=MyDevice_Files_Driver
AddReg=MyDevice_9X_AddReg


[MyDevice_DDI.NT]
CopyFiles=MyDevice_Files_Driver
AddReg=MyDevice_NT_AddReg

[MyDevice_DDI.NT.Services]
Addservice = MyDevice, 0x00000002, MyDevice_AddService

[MyDevice_AddService]
DisplayName    = %SvcDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %10%\System32\Drivers\MyDevice.sys

[MyDevice_NT_AddReg]
HKLM, "System\CurrentControlSet\Services\MyDevice\Parameters","BreakOnEntry", 0x00010001, 0

[MyDevice_Files_Driver]
MyDevice.sys


[Strings]
ProviderName="Acme"
MfgName="Acme"
DeviceDesc="Acme"
DeviceClassName="Device class for MyDevice"
SvcDesc="MyDevice NT service"

windows wdk inf

6
推荐指数
1
解决办法
525
查看次数

GCC和ld找不到导出的符号......但它们就在那里

我有一个C++库和一个C++应用程序,试图使用从库中导出的函数和类.库构建正常,应用程序编译但无法链接.我得到的错误遵循以下形式:

app-source-file.cpp :(.text + 0x2fdb):对`lib-namespace :: GetStatusStr(int)'的未定义引用

链接器似乎可以很好地解决库中的类,但是自由函数和导出的数据(如余弦查找表)总是会导致上述错误.

我使用的是Ubuntu 8.04(Hardy),它是最新的Ubuntu软件包.

链接库的命令是(删除了其他库):

g++ -fPIC -Wall -O3 -shared -Wl,-soname,lib-in-question.so -o ~/project/lib/release/lib-in-question.so
Run Code Online (Sandbox Code Playgroud)

链接应用程序的命令是(删除了其他库):

g++ -fPIC -Wall -O3  -L~/project/lib/release -llib-in-question -o ~/project/release/app-in-question
Run Code Online (Sandbox Code Playgroud)

最后,看来(尽我所知)有问题的符号正在正确导出:

nm -D ~/project/lib/release/lib-in-question.so | grep GetStatusStr --> U _ZN3lib-namespace12GetStatusStrEi
Run Code Online (Sandbox Code Playgroud)

c++ linux g++ shared-libraries

3
推荐指数
1
解决办法
3673
查看次数

标签 统计

c ×1

c++ ×1

g++ ×1

inf ×1

linux ×1

security ×1

shared-libraries ×1

wdk ×1

winapi ×1

windows ×1

windows-vista ×1