WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Win Mobile基础知识创建安全 Windows CE 设备

创建安全 Windows CE 设备
作者:Maricia Alforque  来源:microsoft.com  发布时间:2005-12-21 16:56:27
return CertifyModuleInit(); } // 在 OemLoadInit 之后调用一次或多次 static DWORD OEMCertifyModule(LPBYTE lpData, DWORD cbData) { if (cbData) { // 处理模块字节 return CertifyModule(lpData, cbData); } else { // 最终调用 DWORD dwTrustLevel = OEM_CERTIFY_FALSE; LPBYTE pSignedData; DWORD cbSignedData; BOOL fRet = CertifyModuleFinal(&pSignedData, &cbSignedData); if (fRet) { // 该文件有有效签名 // 我们希望以签名数 // 据返回信任级别 if (cbSignedData < sizeof(CHAR)) dwTrustLevel = OEM_CERTIFY_RUN; else switch (*pSignedData) { case 'T' : dwTrustLevel = OEM_CERTIFY_TRUST; break; case 'R' : dwTrustLevel = OEM_CERTIFY_RUN; break; default: dwTrustLevel = OEM_CERTIFY_FALSE; break; } } #ifdef DEBUG if (!fRet) lpWriteDebugStringFunc(TEXT("OEMCertifyModule:signature check failed.\r\n")); #endif // 返回一个 OEM_CERTIFY 级别 return dwTrustLevel; } } void OEMInit() { ... ... // // 设置模型签名验证挂钩。 // pOEMLoadInit = OEMCertifyInit; pOEMLoadModule = OEMCertifyModule; // // 初始化签名验证公共密钥。 // InitPubKey(g_bSignPublicKeyBlob,sizeof(g_bSignPublicKeyBlob)); // // 其他 OEM 初始化步骤 // ... }

注意:   OEMCertifyModuleInitOEMCertifyModule 函数的名称是任意的;您可以使用任何名称。但重要的是,应初始化 OEMInit 函数中的两个内核指针:pOEMLoadInit 和 pOEMLoadModule,让它们分别指向这两个命名函数。

受限制的 API

除了 OEM 函数,还可以使用 CeGetCurrentTrustCeGetCallerTrust 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

SSPI 函数

SSPI 允许应用程序开发人员使用多个 SSP 中的一个,而不必了解安全性协议的细节。

下表列出了 Windows CE 3.0 支持的 SSPI 函数。

“凭据管理函数”提供对主控者的凭据的访问。主控者是一个操作系统能识别的实体,可以是用户或进程。主控者使用凭据建立用户或应用程序的标识。

函数 说明
AcquireCredentialsHandle 使应用程序能够获取凭据的句柄。
FreeCredentialsHandle 释放凭据句柄和所有相关资源。
QueryCredentialsAttributes 检索凭据属性。

“上下文管理函数”允许应用程序创建和使用安全上下文。安全上下文是与连接相关的安全数据,并且包含诸如会话密钥和会话持续时间等数据。客户端和服务器必须合作,来共同创建安全上下文。

函数 说明
InitializeSecurityContext 通过生成可以传递给服务器或远程对等终端的令牌来初始化安全上下文。
AcceptSecurityContext 使用重定向器验证凭据来建立安全上下文。
DeleteSecurityContext 释放安全上下文,并删除与之相关联的本地数据结构。
QueryContextAttributes 检索安全上下文的属性。
ApplyControlToken 在现有的安全上下文中应用附加的安全性消息。
FreeContextBuffer 释放由安全性提供者分配的内存缓冲区。

上一页  [1] [2] [3] [4]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码