IT点滴

我不去想是否能够成功 既然选择了远方 便只顾风雨兼程
  博客园  :: 首页  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 48 下一页

2012年7月4日

摘要: NTSTATUSIoCallDriver( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ){ return IofCallDriver (DeviceObject, Irp);}NTSTATUSFASTCALLIofCallDriver( IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp ){ // // This routine will either jump immediately to IopfCallDriver, or rather // IovCallDriver. // retur 阅读全文

posted @ 2012-07-04 08:22 Ady Lee 阅读(628) 评论(0) 推荐(0) 编辑

摘要: 1. 一定不要在没有标注 I/O 请求数据包 (IRP) 挂起 (IoMarkIrpPending) 的情况下通过调度例程返回 STATUS_PENDING。2. 一定不要通过中断服务例程 (ISR) 调用 KeSynchronizeExecution。 它会使系统死锁。3. 一定不要将 DeviceObject->Flags 设置为 DO_BUFFERED_IO 和 DO_DIRECT_IO。 它会扰乱系统并最终导致致命错误。 而且,一定不要在 DeviceObject->Flags 中设置 METHOD_BUFFERED、METHOD_NEITHER、METHOD_IN_DIR 阅读全文

posted @ 2012-07-04 08:20 Ady Lee 阅读(292) 评论(0) 推荐(0) 编辑

摘要: http://support.microsoft.com/default.aspx?scid=kb;EN-US;320275http://support.microsoft.com/default.aspx?scid=kb;EN-US;326315 阅读全文

posted @ 2012-07-04 08:19 Ady Lee 阅读(212) 评论(0) 推荐(0) 编辑

2012年6月26日

摘要: 在Windows分层驱动模型中,设备栈中的设备一般都是通过对上层传来的IRP做相应的处理来实现驱动的功能。这里对常用的几种IRP传递及完成的方式进行归纳和总结:1. 在本层驱动中完成1.1 在本层驱动中以同步方式完成在本层同步完成一般做完相应处理后,设置Irp->IoStatus.Status和Irp->IoStatus.Information,调用IoCompleteRequest完成该IRP,return IRP的完成状态即可。1.2 在本层驱动中以异步方式完成在本层异步完成一般是得到IRP后将其入队/起线程另行处理,同时调用IoMarkIrpPending将该IRP标记为Pe 阅读全文

posted @ 2012-06-26 15:35 Ady Lee 阅读(341) 评论(0) 推荐(0) 编辑

2012年6月20日

摘要: 1)当硬件连接到PC或从PC移除时,在硬件上会有信号跳变,BUS Driver会检测到器件的插入和移除,比如DVI的hotplug,再比如USB1.1的1.5K上拉。BUS Driver将调用IOInvalidateDevcieRelations,PNP Manager将知道BUS上的Device关系有所改变。2)为了获得新的Device关系,PNP Manager将调用IRP_MN_QUERY_DEVICE_RELATIONS。BUS Driver将会回应其BUS关系(目录)。3)一旦得知Device之间的关系,PNP Manager就能容易地确定哪些器件没有被初始化。IRP_MN_QUER 阅读全文

posted @ 2012-06-20 08:23 Ady Lee 阅读(390) 评论(0) 推荐(0) 编辑

2012年6月14日

摘要: 无意中看到一种通过控制92H端口bit0位,将其置1来实现重启的方法,刚才测试了一下,效果真好 mov al, 01 out 92h, al另一种,模拟键盘的reset mov al, 0xfe out 0x64, al注i8042 :键盘控制器8042的端口在cpu的io空间地址如下:port----Read/Write-----Function0x60----Read----------Read Input Buffer0x60----Write---------Write Output Buffer0x64----Read----------Read Status Register0x6 阅读全文

posted @ 2012-06-14 09:52 Ady Lee 阅读(475) 评论(0) 推荐(0) 编辑

2012年1月12日

摘要: 在使用CyptoAPI对口令进行加密编程前,必须预先建立密钥容器和密钥。若未对此进行预处理,由于在后续编程中需要在调用CyptEncrpt()进行数据加密之前首先获取到当前机器缺省的密钥容器。这十用于连接默认CSP并获取默认密钥容器的函数CryptAcquireContext()的调用就会出错。因此必须在进行加密运算之前确保机器已经建立了默认的密钥容器。下面的Initia()函数将在程序初始化时被调用用以建立密钥容器和密钥: Void CWorkTimeApp::Initial() { HCRYPTPROV hProv; HCRYPTKEY hKey; Unsigned char ... 阅读全文

posted @ 2012-01-12 16:38 Ady Lee 阅读(611) 评论(0) 推荐(0) 编辑

摘要: 5. 完整代码 #include "stdafx.h"#include <windows.h>#include <WinCrypt.h>#include <stdio.h> // Global Csp HandleHCRYPTPROV hCryptProv = NULL; // Handle for a cryptographic void ToSmartCard(HCERTSTORE hSystemStore){PCCERT_CONTEXT pCertContext = NULL; char pszNameString[256]; DW 阅读全文

posted @ 2012-01-12 16:32 Ady Lee 阅读(976) 评论(0) 推荐(0) 编辑

摘要: 1. 通过Csp读取证书使用的函数 CryptGetUserKey 获取公私钥对的句柄 注意AT_SIGNATURE,AT_KEYEXCHANGE的不同,前者签名,后者加密。 CryptGetKeyParam 读取和公私钥对相关联的证书 注意使用KP_CERTIFICATE 2. 指定Csp容器 通常获取证书时,usbkey已经发证完毕。这是比较难以判断容器的名称。通常会选择默认容器,但有些RA发证时比较特别,可能会使用两个容器。签名证书使用默认容器,而加密证书使用指定的某个容器。 为了验证上面所说的情况,需要枚举Usbkey上的容器进行选择查看。 CryptGetProv... 阅读全文

posted @ 2012-01-12 16:30 Ady Lee 阅读(1681) 评论(0) 推荐(0) 编辑

摘要: 其实CSP主要是对容器里的密钥对操作的,和证书关系不大。容器里的密钥对有两种类型:一种是AT_KEYEXCHANGE,表示加密的密钥对,一种是AT_SIGNATURE表示签名的密钥对。由于美国的出口限制,在MS的CSP中加密的密钥对可以取的密钥最大长度通常会比签名的密钥对短。通常加密的密钥对只会用于加密,签名的密钥对只会用于签名,由于某些原因(例如产生证书请求),加密的密钥对也可以用于签名。我把AT_KEYEXCHANGE和AT_SIGNATURE看作是容器里的两个位置。在智能卡CSP中可以把证书写入容器中,和加密的密钥对对应的证书写到AT_KEYEXCHANGE位置中,和签名的密钥对对应的证 阅读全文

posted @ 2012-01-12 16:28 Ady Lee 阅读(531) 评论(0) 推荐(0) 编辑

上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 48 下一页