第5章-避免常见地RPC编程错误.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
下载 第5章 避免常见的RPC编程错误 这一章列出了一系列简单、但却是常见的 R P C编程错误,这些错误是微软 Wi n d o w s应用程序 开发人员在开发过程中应该注意的。 如果您拥有“Wi n 3 2开发人员参考库”套书,由于常见的 R P C编程错误已经包括在其中了, 您可能会对本书的一些信息比较熟悉。然而,我认为这些信息是与这套“网络连接服务开发人 员参考库”、特别是本卷密切相关的,所以我把它放在这里,尽量使您避免一些编程错误。 这一章首先是解决问题方法的概述,它对您应该注意的每一个被编号且加下划线的常见编 码错误给出了简短的解决方法。然后,这一章转向常见的 R P C编程错误,对您在使用R P C编程时 尤其应该注意的问题和错误给出了更进一步的详细说明。 5.1 解决方法概述 这一节对下面各章中解释的每问题提供了一个简短的回答。想获得这些问题中任何一个的 更多信息,请阅读本章随后的相关解释。 1 ) p o i n t e r _ d e f a u l t ( u n i q u e )及嵌套指针:在引用唯一指针之前要检查该指针是否为 N U L L 。 2 ) 在具有R P C 能力的结构中,一个有效的 s w i t c h _ i s取值并不能保证指针为非 N U L L 。在使用 带有缺省从句的s w i t c h _ i s结构时,必须: • 确认打开( switch on )的值在预定范围之内。 • 在引用打开对象内部的指针之前,确认该指针是非 N U L L 的。 3) 一个NULL DACL 不提供任何保护:所以不要用NULL DACL ,它起不到任何保护作用。 4) 在执行任何一个与安全有关的操作之前,调用 R p c I m p e r s o n a t e C l i e n t ( ) :在代表调用者执 行操作之前先完成假冒( I m p e r s o n a t e )工作,并检查结果。 5) 开始和结束假冒。在代表调用者完成任务之后,要结束假冒,并检查结果。 6) 在. i d l文件里用 s t r i n g说明的字符串是以 0结尾的,如果没有在 . i d l文件里指定 s t r i n g属性, 就不要指望字符串会以 0结尾。 7) 不要将未指明长度的数据拷贝到固定长度的缓冲区中,这个错误无需更多解释。 8) size_is可能会导致一个长度为 0 的结构;在没有检查其长度之前就引用这个结构是不安全 的:在引用相应的指针前要检查s i z e _ i s指定的数据长度。 9) size_is 或l e n g t h _ i s 说明中的算术表达式可能会溢出:要知道使用 s i z e _ i s或l e n g t h _ i s 的 M I D L定义中的表达式计算可能导致溢出,而且服务器不可能检测到。 10) 严格的上下文句柄:请使用严格的上下文句柄。 5.2 常见的RPC编程错误 下面这一节详细解释R P C常见的编程错误,并指导您如何避免这些错误。 32使用第一部分 概 述 下载 5.2.1 Pointer_default (unique )和嵌套指针 当一个R P C结构里面包含指针时,指针缺省为默认类型(通常由p o i n t e r _ d e f a u l t ( u n i q u e ) 设定)。 在这种情况下,u n i q u e指针可能为N U L L ,在被引用之间必须确认为非N U L L 。 例子: [ p o i n t e r _ d e f a u l t ( u n i q u e ) ] typedef struct _RPC_STRUCTURE { INSTANCE_DATA *Instance; } R P C _ S T R U C T U R E ; N T S T A T U S R p c I n t e r f a c e ( [in ] RPC__STR

文档评论(0)

zhuanqmf01 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档