海康威视SDK - 门禁admin用户密码设置

发布时间 2023-05-25 09:19:15作者: 摧残一生

门禁/报警主机获取用户信息

方法及参数

  1. 调用方法:NET_DVR_GetAlarmDeviceUser(userId, 1, ref NET_DVR_ALARM_DEVICE_USER);

    //HCNetSDK中声明类
    [DllImport(@"..\..\runtime\hk\HCNetSDK.dll")]
    public static extern bool NET_DVR_GetAlarmDeviceUser(int lUserID, int lUserIndex, ref NET_DVR_ALARM_DEVICE_USER lpDeviceUser);
    
    参数 说明
    lUserID 登录时返回的句柄
    lUserIndex 门禁的起始码是1;报警主机的起始码是0。设置错误时,错误码会现实11.
    lpDeviceUser NET_DVR_ALARM_DEVICE_USER 类,返回配置信息
    返回值 true为成功,false为失败
  2. 声明变量类:NET_DVR_ALARM_DEVICE_USER

    如果HCNetSDK.cs中不存在,需自己手动添加,添加时一定要参考HCNetSDK.h文件

    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct NET_DVR_ALARM_DEVICE_USER
    {
        public Int64 dwSize;                 // 结构体大小
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = NAME_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sUserName;    // 用户名
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sPassword;    // 密码
        NET_DVR_IPADDR struUserIP;                    /* 用户IP地址(为0时表示允许任何地址) */
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 6, ArraySubType = UnmanagedType.I1)]
        public byte[] byMACAddr;            /* 物理地址 */
        public byte byUserType; // 0-普通用户(操作员) 1-管理员用户 2-安装员用户 3-制造商用户
        public byte byAlarmOnRight;         // 布防权限
        public byte byAlarmOffRight;        // 撤防权限
        public byte byBypassRight;          // 旁路权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = MAX_RIGHT, ArraySubType = UnmanagedType.I1)]
        public byte[] byOtherRight;  // 其他权限
        // 0 -- 日志权限
        // 1 -- 重启关机
        // 2 -- 参数设置权限
        // 3 -- 参数获取权限
        // 4 -- 恢复默认参数权限
        // 5 -- 警号输出权限
        // 6 -- PTZ 控制权限
        // 7 -- 远程升级权限
        // 8 -- 远程预览
        // 9 -- 远程手动录像
        // 10 -- 远程回放
        // 11 -- 消警
        // 12 -- 强制布防
        // 13 -- 永久旁路
        // 14 -- 添加更改个人授权代码
        // 15 -- 调试模式
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetPreviewRight;    // 远程可以预览的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetRecordRight;    // 远程可以录像的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetPlaybackRight; // 远程可以回放的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.I1)]
        public byte[] byNetPTZRight;        // 远程可以PTZ的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限
        //BYTE    byPriority;                                        // 优先级,0xff-无,0--低,1--中,2--高
        //无(表示不支持优先级的设置)
        //低(默认权限:包括远程回放,远程查看日志和状态,远程关机/重启)
        //中(包括远程控制云台,远程手动录像,远程回放,语音对讲和远程预览,本地备份,本地/远程关机/重启)
        //高(管理员)
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sOriginalPassword;        // 原始密码
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = PASSWD_LEN, ArraySubType = UnmanagedType.I1)]
        public byte[] sKeypadPassword;        // 键盘密码
        public byte[] byUserEnabled;        // 用户是否开启使用:0-无效,1-开启,2-不开启
        [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 135, ArraySubType = UnmanagedType.I1)]
        public byte[] byRes2;                  // 保留字节
    }
    

调用代码

uint error = 0;
// 声明NET_DVR_ALARM_DEVICE_USER变量
CHCNetSDK.NET_DVR_ALARM_DEVICE_USER alarmDeviceUser = new CHCNetSDK.NET_DVR_ALARM_DEVICE_USER();
// 调用获取配置信息方法
if(CHCNetSDK.NET_DVR_GetAlarmDeviceUser(userId, 1, ref alarmDeviceUser)){
	//返回成功
}else{
	//查看错误码
	error = CHCNetSDK.NET_DVR_GetLastError();
}

门禁/报警主机设置密码

方法及参数

  1. 使用方法

    1. CHCNetSDK.NET_DVR_GetAlarmDeviceUser同上

    2. NET_DVR_SetAlarmDeviceUser(userId, 1, ref alarmDeviceUser)

      [DllImport(@"..\..\runtime\hk\HCNetSDK.dll")]
      public static extern bool NET_DVR_SetAlarmDeviceUser(int lUserID, int lUserIndex, ref NET_DVR_ALARM_DEVICE_USER lpDeviceUser);
      
      参数 说明
      lUserID 登录时返回的句柄
      lUserIndex 门禁:admin默认为1
      报警主机:默认从0开始
      lpDeviceUser 需要设置的用户参数
      返回值 true为成功,false为失败

步骤:

通过NET_DVR_GetAlarmDeviceUser方法获得用户参数后,将密码和原始密码分别赋值给sPassword和sOriginalPassword,然后调用NET_DVR_SetAlarmDeviceUser方法即可。

注意:返回的sPassword参数为空,是无法获得到密码的

代码实现:

// 门禁设置密码
CHCNetSDK.NET_DVR_ALARM_DEVICE_USER alarmDeviceUser = new CHCNetSDK.NET_DVR_ALARM_DEVICE_USER();
// 调用获取配置信息方法
CHCNetSDK.NET_DVR_GetAlarmDeviceUser(userId, 1, ref alarmDeviceUser);
// 设置新密码
Encoding.UTF8.GetBytes("a7777777").CopyTo(alarmDeviceUser.sPassword, 0);
// 原始密码
Encoding.UTF8.GetBytes("a88888888").CopyTo(alarmDeviceUser.sOriginalPassword, 0);
bool b = CHCNetSDK.NET_DVR_SetAlarmDeviceUser(userId, 1, ref alarmDeviceUser);
uint error = CHCNetSDK.NET_DVR_GetLastError();

当出现错误码为11时,请注意是否为struct类型中设置的变量长度不对,例如sUserName的长度应设置为32,而自己设置成了64。

具体数值请参考:SDK中头文件夹的HCNetSDK.h文件。