注册表API函数和获取系统版本
来源:互联网 发布:库房库存数据分析 编辑:程序博客网 时间:2024/06/06 10:46
开发过程中,遇到一些访问注册表的函数,这里贴几个看着常用的函数。
RegOpenKeyEx:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724897(v=vs.85).aspx
RegCreateKeyEx:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724844(v=vs.85).aspx
RegQueryValueEx:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx
RegCloseKey:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724837(v=vs.85).aspx
RegQueryInfoKey:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724902(v=vs.85).aspx
RegEnumKeyEx:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724862(v=vs.85).aspx
RegEnumValue:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724865(v=vs.85).aspx
//打开某个注册表项LONG WINAPI RegOpenKeyEx( _In_ HKEY hKey, _In_opt_ LPCTSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult);//hKey参数可以是通过RegOpenKeyEx或RegCreateKeyEx返回的有效HKEY值,也可以是以下值:/*HKEY_CLASSES_ROOTHKEY_CURRENT_CONFIGHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERS*///lpSubKey参数是要打开的子项的字符串//ulOptions参数可设置为0或REG_OPTION_OPEN_LINK,常为0//samDesired参数类似文件操作中的OpenMode吧,一般有KEY_READ、KEY_WRITE、KEY_EXECUTE等//phkResult参数用于接收返回的HKEY句柄,使用完后要用RegCloseKey关闭。
//创建或打开某个注册表项LONG WINAPI RegCreateKeyEx( _In_ HKEY hKey, _In_ LPCTSTR lpSubKey, _Reserved_ DWORD Reserved,//NULL _In_opt_ LPTSTR lpClass,//NULL _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition);
//获取某个键的值LONG WINAPI RegQueryValueEx( _In_ HKEY hKey, _In_opt_ LPCTSTR lpValueName,//要获得值的键名 _Reserved_ LPDWORD lpReserved,//为NULL _Out_opt_ LPDWORD lpType,//标识接受的数据是什么类型 _Out_opt_ LPBYTE lpData,//接收值的缓冲区 _Inout_opt_ LPDWORD lpcbData//缓冲区大小和实际接受大小);
//关闭HKEY句柄LONG WINAPI RegCloseKey( _In_ HKEY hKey);
//获取表项中的信息LONG WINAPI RegQueryInfoKey( _In_ HKEY hKey, _Out_opt_ LPTSTR lpClass,//可为NULL _Inout_opt_ LPDWORD lpcClass,//可为NULL _Reserved_ LPDWORD lpReserved,//NULL _Out_opt_ LPDWORD lpcSubKeys,//接收该项下有多少个子项,可为NULL _Out_opt_ LPDWORD lpcMaxSubKeyLen,//接收该项下最长子项的长度,可为NULL _Out_opt_ LPDWORD lpcMaxClassLen,//可为NULL _Out_opt_ LPDWORD lpcValues,//接收该项下有多少个直属键值,可为NULL _Out_opt_ LPDWORD lpcMaxValueNameLen,//接收该项下最长键的长度,可为NULL _Out_opt_ LPDWORD lpcMaxValueLen,//接受该项下最长值的长度,可为NULL _Out_opt_ LPDWORD lpcbSecurityDescriptor,//安全选项,可为NULL _Out_opt_ PFILETIME lpftLastWriteTime//最后写入时间,可为NULL);//获取到的项数目和键值数目与实际在windows下通过注册表工具看到的并不一样,总是少于或等于,可能与访问权限有关。
一般,通过RegQueryInfoKey得知子项数目和子键值数目后,可通过RegEnumKeyEx或RegEnumValue获取信息。
//参数很直观。LONG WINAPI RegEnumKeyEx( _In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPTSTR lpName, _Inout_ LPDWORD lpcName, _Reserved_ LPDWORD lpReserved, _Inout_ LPTSTR lpClass, _Inout_opt_ LPDWORD lpcClass, _Out_opt_ PFILETIME lpftLastWriteTime);LONG WINAPI RegEnumValue( _In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPTSTR lpValueName, _Inout_ LPDWORD lpcchValueName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPDWORD lpType, _Out_opt_ LPBYTE lpData, _Inout_opt_ LPDWORD lpcbData);
上面这些函数执行成功返回值为ERROR_SUCCESS,在很多情况下有些注册表在非管理员权限下无权访问,那么就要注意判断返回值再执行后续操作。
另外,由于系统不一样,导致的注册表也会有所差别,那可以根据系统版本来区分对待。
下面2个获取系统版本信息的函数(就windows而言)
DWORD WINAPI GetVersion(void);BOOL WINAPI GetVersionEx( _Inout_ LPOSVERSIONINFO lpVersionInfo);//OSVERSIONINFO结构如下:typedef struct _OSVERSIONINFO { DWORD dwOSVersionInfoSize;//设置为sizeof(OSVERSIONINFO) DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId;//PlatformId一般返回2,VER_PLATFORM_WIN32_NT TCHAR szCSDVersion[128];// such as "Service Pack 3",如果没有Service Pack则为空字符串} OSVERSIONINFO;
GetVersion直接返回一个DWORD值,低8位为主版本号,低16位的高8位为次版本号,高16位为构建版本号(BuildNumber,我也不知道该怎么译好。。)
可以用LOWORD(),LOBYTE()这些宏来获取。
而GetVersionEx会填充一个OSVERSIONINFO结构体,信息更多更直接。
- 注册表API函数和获取系统版本
- 利用Windows API函数和注册表获取系统信息
- 注册表获取系统驱动版本信息
- Windows API 函数GetVersionEx 获取系统版本出错
- Windows API 函数GetVersionEx 获取系统版本出错
- adb获取android手机系统版本,已对应的api版本和硬件相关信息
- adb获取android手机系统版本,已对应的api版本和硬件相关信息
- windows API获取系统版本信息
- 有关注册表API函数
- 有关注册表API函数
- 注册表API函数
- API注册表函数
- API注册表函数【转】
- api注册表操作函数
- 有关注册表API函数
- API注册表函数
- 有关注册表API函数
- 有关注册表API函数
- 《APUE》笔记-第五章-标准I/O库
- easyui-datagrid向后台传送其它的参数
- linux c中的测试文件权限(access)
- java中方法重写(Override)与方法重载(Overload)的区别
- 剑指offer面试题3
- 注册表API函数和获取系统版本
- hdu5937 Equation
- USB2.0协议分析
- 乘法口诀02
- leetcode(3)7.Reverse Integer
- linux c中修改文件权限
- Problem 49 Prime permutations (set + vector)
- linux用U盘安装4G大ISO镜像
- struts2 开发学习实录