受限制的 API
除了 OEM 函数,还可以使用 CeGetCurrentTrust 和 CeGetCallerTrust API 来查询调用应用程序的信任级别。您可以使用这些函数验证应用程序的信任级别。
不信任模块不能调用以下 API:
- SetInterruptEvent
- SetSystemMemoryDivision
- CESetThreadPriority
- CeSetThreadQuantum
- ForcePageout
- VirtualCopy
- LockPages
- UnlockPages
- SetProcPermissions
- SetKMode
- ReadProcessMemory
- WriteProcessMemory
- SetCleanRebootFlag
- PowerOffSystem
- DebugActiveProcess
CreateProcess API 中的调试标志:DEBUG_ONLY_THIS_PROCESS 和 DEBUG_PROCESS 也是受限制的。
Windows CE 3.0 中的安全注册表体系结构只允许已经识别的“信任应用程序”(OEM_CERTIFY_TRUST) 修改受保护注册表中的键和值。
在 Windows CE 3.0 中,以下注册表主键及其子键是受保护的,以避免不信任应用程序的非法操作:
- HKEY_LOCAL_MACHINE\Comm
- HKEY_LOCAL_MACHINE\Drivers
- HKEY_LOCAL_MACHINE\HARDWARE
- HKEY_LOCAL_MACHINE\SYSTEM
- HKEY_LOCAL_MACHINE\Init
- HKEY_LOCAL_MACHINE\WDMDrivers
此外,如果不信任应用程序试图使用以下注册表函数,将得到 ERROR_ACCESS_DENIED 返回值:
- RegSetValueEx
- RegCreateKeyEx
- RegDeleteKey
- RegDeleteValue
因为注册表的其余部分是不受保护的,所以 OEM 必须将所有重要的注册表信息存放在某个受保护的键中。
注意: 所有应用程序对所有注册表键和值都具有只读访问权限。
使用 SSPI 管理安全性提供者
在 Secur32.dll 模块中提供的安全性支持提供者接口 (SSPI) 是一个严格定义的通用 API,用于获取进行身份验证、消息的完整性检查和消息加密的集成安全服务。它在应用程序层协议和安全性协议之间提供了一个抽象层。因为不同的应用程序在网络上传输数据时所采用的识别或验证用户身份的方法,以及加密数据的方法各不相同,因此 Windows CE SSPI 提供了访问包含各种身份验证和加密数据方案的 DLL 的途径。这些 DLL 被称作安全性支持提供者 (SSP)。
下图说明了 SSP DLL 和 SSPI Secur32.dll、Winsock、WinInet 之间的关系。

图 1:SSP DLL 和 SSPI Secur32.dll、Winsock、WinInet 之间的关系
SSPI 生成应用程序可用的一个或多个 SSP(也叫做安全包)。安全包将不同的 SSPI 函数映射到该安全包专用的某个安全性协议的实现上。OEM 也可以编写他们自己的安全包,然后将其添加到注册表中。
以下是 Windows CE 3.0 中可用的 SSP:
- Schannel Cryptographic Provider
- Windows NT LAN Manager SSP