WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(三)——所涉及的Windows驱动基... 阅读

深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(4)

 2009-09-11 00:00:00 来源:WEB开发网   
核心提示: 1.1.1.7 WinPcap中注册表操作实例下列代码是WinPcap中对注册操作的实际代码,PWCHAR getAdaptersList(void){ …/**设置一个OBJECT_ATTRIBUTES类型的参数objAttrs,深度剖析WinPcap之(三)——所涉及的Wind

1.1.1.7     WinPcap中注册表操作实例

下列代码是WinPcap中对注册操作的实际代码。

PWCHAR getAdaptersList(void)
{
    …
 /*
*设置一个OBJECT_ATTRIBUTES类型的参数objAttrs,为了后续调用
*其中NDIS_STRING AdapterListKey =
* NDIS_STRING_CONST("\\Registry\\Machine\\System\\CurrentControlSet
*      \\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}");
*/
    InitializeObjectAttributes(&objAttrs, &AdapterListKey,
        OBJ_CASE_INSENSITIVE, NULL, NULL);
 
/*打开注册表表项,返回objAttrs中所描述的注册表表项的句柄*/
    status = ZwOpenKey(&keyHandle, KEY_READ, &objAttrs);
    if (!NT_SUCCESS(status)) {
        //打开失败
    }
    else { //打开成功      
        ULONG resultLength;
        KEY_VALUE_PARTIAL_INFORMATION valueInfo;
        CHAR AdapInfo[1024];
        UINT i=0;
        /*遍历设备链表,获取一个已打开注册表项子项的信息*/                     while((status=ZwEnumerateKey(keyHandle,i,KeyBasicInformation,
AdapInfo,sizeof(AdapInfo),&resultLength))==STATUS_SUCCESS)
{
            …    
/*设置一个OBJECT_ATTRIBUTES类型的参数objAttrs,为了后续调用*/
            InitializeObjectAttributes(&objAttrs, &AdapterKeyName,
                    OBJ_CASE_INSENSITIVE, NULL, NULL);     
          /*打开注册表表项,返回objAttrs中所描述的注册表表项的句柄*/
status=ZwOpenKey(&ExportKeyHandle,KEY_READ,&objAttrs);
            /*查找“Export”键名的键值信息*/
            status = ZwQueryValueKey(ExportKeyHandle, &FinalExportKey,
                    KeyValuePartialInformation, &valueInfo,
                    sizeof(valueInfo), &resultLength);
               
if (!NT_SUCCESS(status) && (status != STATUS_BUFFER_OVERFLOW)) {
                //查询失败
            }
            else { //查询成功
/*计算所需的内存大小*/

/*分配内存,用于查询*/

                if (valueInfoP != NULL) {//分配内存成功
                    status = ZwQueryValueKey(ExportKeyHandle,
                            &FinalExportKey,
                            KeyValuePartialInformation,
                            valueInfoP,
                            valueInfoLength, &resultLength);
                    if (!NT_SUCCESS(status)) {
                        //查询失败
                    }
                    else{//查询成功
                    …
                    }
                    ExFreePool(valueInfoP);
                }
                else {
//分配用于查询的内存失败
                }
            }//一次查找“Export”键名的键值信息结束
            …
            //关闭注册表子项
            ZwClose (ExportKeyHandle);
            i++;
        }//结束while语句
 
/*关闭注册表项*/
        ZwClose (keyHandle);          
    }

}

出处: http://eslxf.blog.51cto.com/918801/196917

上一页  1 2 3 4 5 6 

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接