草庐IT

c - RegCreateKeyEx() 和 GetLastError()

coder 2024-06-16 原文

为什么是RegCreateKeyEx()返回 LONG ,而不是设置 DWORD错误代码来自 SetLastError()

转换它的 LONG 对我来说安全吗?将值返回给 DWORD然后用 SetLastError() 将其设置为全局错误代码?

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844(v=vs.85).aspx

最佳答案

Why is it that RegCreateKeyEx() returns a LONG, instead of setting a DWORD error code via SetLastError()?

可能是因为当 Windows 还是 16 位时,Registry API 就开始出现了,而那时 SetLastError()/GetLastError() 函数还不存在。添加 Registry 函数的 32 位版本的人决定保持调用样式向后兼容比更新为使用 SetLastError() 更重要。

查看 Raymond Chen 的精彩博客(和精彩的书)herehere获取相关信息。

Would it be safe for me to convert its LONG return value to a DWORD and then set it as the global error code with SetLastError()?

没有理由不。只要您对包括 ERROR_SUCCESS 在内的每个值都执行此操作。

关于c - RegCreateKeyEx() 和 GetLastError(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281832/

有关c - RegCreateKeyEx() 和 GetLastError()的更多相关文章

  1. c++ - 系统调用 GetLastError() 不返回错误 - 2

    在golang中syscall.GetLastError()不返回最后一个错误。看下面的例子ifhandle:=_OpenSCManager(machineNamePtr,databaseNamePtr,desiredAccess);handle==nil{iferr:=syscall.GetLastError();err!=nil{returnInvalidServiceDatabaseHandleHandle,ServiceErrno(err.(syscall.Errno))}}err始终为nil。假设machineNamePtr是一台不存在的机器。使用C++测试了相同的代码,Ge

  2. asp.net - 调试诊断工具 - 无法修改规则 - "failed to start dbgsvc getlasterror returns 0x0000422" - 2

    我试图使用Microsoft的调试诊断工具(DebugDiag)来识别w3wp.exe/clr.dll中发生的应用程序事件日志错误,如thisanswer中所述.但是,当我尝试添加新规则时,出现错误对话框:Cannotconnecttoservice.FailedtostartDbgSVC.GetLastErrorreturns0x00000422如何才能成功添加规则? 最佳答案 此错误表明DebugDiagnosticService服务被禁用。修复:开始>运行>services.msc在出现的“服务”对话框中,在列表中找到“调试诊

  3. windows - OpenEvent,getlasterror 返回 2 - 2

    我正在构建WindowsUMDF2.0驱动程序,当我调用OpenEvent时出现错误2。任何帮助都将非常有用。下面是我的代码HANDLEuserEvent=OpenEvent(EVENT_ALL_ACCESS,FALSE,myUserEvent);标准::计数 最佳答案 Windows7,8需要安全描述符,而wec不需要。它们的默认安全描述符不同。此外,如果您的事件要由不同的用户或提升的进程访问,您需要将其设为全局事件,否则将无法访问它。 关于windows-OpenEvent,getl

  4. windows - 是否存在函数 CreateFile 返回 INVALID_HANDLE_VALUE 而 GetLastError() 返回 ERROR_ALREADY_EXISTS 的情况 - 2

    我在MSDN上搜索了一下HANDLEWINAPICreateFile(_In_LPCTSTRlpFileName,_In_DWORDdwDesiredAccess,_In_DWORDdwShareMode,_In_opt_LPSECURITY_ATTRIBUTESlpSecurityAttributes,_In_DWORDdwCreationDisposition,_In_DWORDdwFlagsAndAttributes,_In_opt_HANDLEhTemplateFile);如果dwCreationDisposition==CREATE_ALWAYS或OPEN_ALWAYS,它表

  5. c++ - 为什么 GetLastError() 在调试期间与 "normal"执行期间返回不同的代码? - 2

    try{pConnect=sess->GetFtpConnection(ftpArgs.host,ftpArgs.userName,ftpArgs.password,port,FALSE);}catch(CInternetException*pEx){loginErrCode=GetLastError();printf("loginErrCode:%d\n",loginErrCode);if(loginErrCode==12013){printf("Incorrectusername!\n");exit(0);}elseif(loginErrCode==12014){printf("I

  6. c - RegCreateKeyEx() 和 GetLastError() - 2

    为什么是RegCreateKeyEx()返回LONG,而不是设置DWORD错误代码来自SetLastError()?转换它的LONG对我来说安全吗?将值返回给DWORD然后用SetLastError()将其设置为全局错误代码?http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844(v=vs.85).aspx 最佳答案 WhyisitthatRegCreateKeyEx()returnsaLONG,insteadofsettingaDWORDerrorcodev

  7. c++ - 为什么 GetLastError() (NOT GetReturnMessage) 在用户名错误时返回 “wrong password”? - 2

    这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:WhydoesGetErrorMessagereturn“wrongpassword”,whentheusernameiswrong?自GetErrorMessageg为无效密码和用户名保留相同的字符串,我决定使用GetLastError(),因为它有一个单独的错误each.但是,如果用户名不正确,它仍然会给我代码12014?(密码错误)但有一个单独的错误代码:ERROR_INTERNET_INCORRECT_USER_NAME-12013这不应该起作用吗?或者这也是有意为之的吗?谢谢。try{pConnec

  8. windows - WinInet::InternetSetOption(...) 总是返回 0 而 GetLastError() 返回 12018 - 2

    我正在尝试使用InternetSetOption(...)方法为代理设置用户名和密码。但是,它总是返回零,最后一个错误设置为12018。下面是我的代码片段。#include"stdafx.h"#includeint_tmain(intargc,_TCHAR*argv[]){HINTERNET_session=::InternetOpen(_T("TestProgram"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,NULL);LPCTSTRproxyUserName=L"username";LPCTSTRproxyPassword=L"userpas

  9. c - LoadImage() 返回 NULL 和 GetLastError() 返回 0 - 2

    我一直在网上的不同论坛上搜索答案,但似乎没有与我的情况相符的...我正在使用Windows7,VS2010。我有一个使用定时器来调用任务栏刷新功能的应用程序。在该任务栏函数中包含对LoadImage()的调用,该调用从资源文件中获取图标图像,并最终发送给taskber(使用shell_notifyicon)。在运行应用程序时,这似乎在前几个小时内工作正常,但突然LoadImage()开始失败(它始终是它尝试加载的同一个.ico文件)并返回NULL。我在之后直接插入了一个GetLastError调用,但它总是返回0(表示成功)。图像本身仍然是好的和有效的,我无法解释这一点。有什么线索吗?

  10. c++ - 当前路径的 loadlibrary 失败,GetLastError() == 0 - 2

    我有一个从当前路径加载DLL的简单程序#include#includeusingnamespacestd;autoloaddll(constchar*library){autodllModule=LoadLibrary(library);if(dllModule==NULL)throw"Can'tloaddll";returndllModule;}intmain(){try{autoHandle=loaddll("ISab.dll");}catch(constchar*error){cerr加载库对当前路径中的每个DLL都失败,但对像User.dll这样的DLL成功如果我运行它,输出会

随机推荐