lbj18
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分276分
  • 威望31点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
阅读:1994回复:6

求救!电脑启动时打开注册表问题!

楼主#
更多 发布于:2005-07-19 09:55
  求救!电脑启动时打开注册表问题!
我编写Driver要在电脑启动时打开注册表,可是我总是打开注册表出错!请高手们知道一下,万分感谢!
#define REGPATH L"\\Registry\\Machine\\SOFTWARE\\MYTEST"
 NTSTATUS GetRegValueDword()
{
       NTSTATUS Status;
       OBJECT_ATTRIBUTES ObjectAttributes;
       HANDLE KeyHandle;
       UNICODE_STRING UnicodeRegPath;
       UNICODE_STRING UnicodeValueName;
       ULONG nTotalOther=1;

       RtlInitUnicodeString(&UnicodeRegPath,REGPATH);
       RtlInitUnicodeString(&UnicodeValueName, L"dwMyTest");
      
       InitializeObjectAttributes(&ObjectAttributes,
              &UnicodeRegPath,
          OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, // Flags
              NULL, // Root directory
              NULL); // Security descriptor
      
       Status = ZwOpenKey(&KeyHandle,
              KEY_ALL_ACCESS,
              &ObjectAttributes);
                //   出错,错误码是-1073741772
       if (Status != STATUS_SUCCESS)
       {
              KdPrint(("Open Error!\n"));

              Status=ZwCreateKey(  //创建一个注册表键
                     &KeyHandle,
                     KEY_ALL_ACCESS,
                     &ObjectAttributes,
                     0,
                     (PUNICODE_STRING) NULL,
                     REG_OPTION_NON_VOLATILE,
                     NULL
                     );

              KdPrint(("ZwCreateKey Status = %d\n",Status));

              if (Status == STATUS_SUCCESS)
              {
        Status = RtlWriteRegistryValue(   //向注册表写一个值
              RTL_REGISTRY_ABSOLUTE,
              REGPATH
              L"dwMyTest",
              REG_DWORD,
              &nTotalOther,
              4);
                     if (Status == STATUS_SUCCESS)
                     {
                            ZwClose(KeyHandle);
                            KdPrint(("Write ok\n"));
                     }
                     else
                     {
                            ZwClose(KeyHandle);
                            KdPrint(("Write Error\n"));
                     }
                     return STATUS_INVALID_DEVICE_REQUEST;
              }
              else
              {
                     ZwClose(KeyHandle);
                     KdPrint(("Create Error\n"));
                     return STATUS_SUCCESS;
              }
       }
       else
       {
              ZwClose(KeyHandle);
              KdPrint(("Open Registry Ok!\n"));
              return STATUS_SUCCESS;
       }
}
lbj18
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分276分
  • 威望31点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-19 10:05
我这是视频采集卡的驱动,我想刚安装的时候通过注册表使系统重新启动,而重启后再来读注册表确认用不用申请内存等......所以有没有可能是因为先加载了硬件的驱动,才生成注册表呢? 因为我如果进系统后读的话就是没有问题的.....
Henry
驱动牛犊
驱动牛犊
  • 注册日期2001-04-27
  • 最后登录2011-06-20
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-19 15:27
你那个错误代码为C0000034,STATUS_OBJECT_NAME_NOT_FOUND。
可能是应为注册表没有装载完成吧,你把驱动程序的INF里面的LoadOrderGroup 和 StartType修改一下,
把驱动程序的加载时间推后一点试试吧。
驱动人生。
lbj18
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分276分
  • 威望31点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-19 17:31
还是不行呢,我想也应该是这时这个注册表项还没有加载到,还有什么办法吗?
Henry
驱动牛犊
驱动牛犊
  • 注册日期2001-04-27
  • 最后登录2011-06-20
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-20 11:12
这样啊,那只有自己写一个应用程序在开机的时候运行并通知驱动程序读取注册表了。
驱动人生。
Leonsoft
驱动小牛
驱动小牛
  • 注册日期2003-05-08
  • 最后登录2012-08-11
  • 粉丝1
  • 关注0
  • 积分21分
  • 威望281点
  • 贡献值1点
  • 好评度103点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-21 17:46
嗯,那时候还没有加载完,把startType设定为3试试看。
I will do the best with what the God gave me.
lbj18
驱动牛犊
驱动牛犊
  • 注册日期2005-03-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分276分
  • 威望31点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-22 15:30
我本来就是设置为3了的啊,....
ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
StartType      = 3                  ; SERVICE_DEMAND_START
ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
游客

返回顶部