Table of Contents
승인됨
귀하의 회사에 Win32가 설치되어 있고 클라이언트가 귀하의 컴퓨터를 사용하여 최신 오류 메시지를 수신하는 경우 이 프로그램이 제 문제를 해결하는 데 도움이 되기를 바랍니다.
<울>
많은 시스템 기능이 목적이 아닐 때 회사는 명확한 오류 규칙을 설정합니다. 가족 앱에 유용한 오류에 대한 자세한 정보가 필요한 경우 GetLastError 를 사용하여 최신 오류 프로그래밍을 검색하고 FormatMessage 와 함께 작동하는 오류에 대한 설명을 걸 수도 있습니다. 에이>.
다음 단계에는 특히 오류 메시지를 생성하고 특정 프로세스를 종료하는 독점적인 오류 처리 기능이 포함되어 있습니다. lpszFunction 매개변수는 코드에서 마지막 오류를 감지한 함수의 현재 개인 이름입니다.
#include #include 무효 오류 종료(LPTSTR lpszFunction) // 마지막 문제 코드에 대한 컴퓨터 오류 다이어그램을 가져옵니다. LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); 메시지 형식( FORMAT_MESSAGE_ALLOCATE_BUFFER기본 공허() // 오류가 날 수 있음 제공됨(! GetProcessId(NULL)) 오류 종료(텍스트("GetProcessId"));
이 아이디어는 나중에 사용해야 하므로 여기에서 생략하겠습니다. 적합한 하늘의 가장 중요한 소스입니다. 빌드를 위해 C와 C++ 모두에서 실제로 작동하는 훌륭한 바이너리 호환 도구입니다.
#include / *** * 메모리가 충분하면 0을 반환합니다. 스트림은 바이트 단위로 지정해야 합니다. 훨씬 더. 지금은 일반적으로 공간이 충분하지 않을 때 결과를 조정합니다. - 단 하나의 오류. * /__declspec(dll 내보내기)int GetErrorMessageA(DWORD dwErrorCode, LPSTR lpResult, DWORD dwBytes) LPSTR-tmp; DWORD 결과_렌; result_len = 형식메시지A( FORMAT_MESSAGE_FROM_SYSTEM/ *** * 실제로 사용 가능한 공간이 충분하면 0으로 진행하고 버퍼 사이에 필요한 크기(바이트) 2. 공간이 충분하지 않은 경우 결과를 조정합니다. 오류의 경우 -2입니다. * /__declspec(dll 내보내기)int GetErrorMessageW(DWORD dwErrorCode, LPWSTR lpResult, DWORD dwBytes) LPWSTR-tmp; DWORD 기호; DWORD_result_bytes; nchars는 dwBytes >> 1과 일치합니다. result_bytes = 소수 * FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM
승인됨
ASR Pro 복구 도구는 느리게 실행되거나 레지스트리 문제가 있거나 맬웨어에 감염된 Windows PC를 위한 솔루션입니다. 이 강력하고 사용하기 쉬운 도구는 PC를 신속하게 진단 및 수정하여 성능을 높이고 메모리를 최적화하며 프로세스의 보안을 개선할 수 있습니다. 더 이상 느린 컴퓨터로 고통받지 마세요. 지금 ASR Pro을 사용해 보세요!
#ifndef GetErrorMessage_H#define GetErrorMessage_H#include / *** - 0을 반환합니다. 공간이 많으면 스트림 바이트가 필요합니다. * 공간이 부족할 경우 끝까지 작업합니다. - 오류에 대한 경우에 특정합니다. * /정적 int int GetErrorMessageA(DWORD dwErrorCode, LPSTR lpResult, DWORD dwBytes) FORMAT_MESSAGE_ALLOCATE_BUFFER, 영, dw 오류 코드, LANG_SYSTEM_DEFAULT, (LPSTR) 및 tmp, 0, 영 ); 보시다시피 실제 이벤트는 (result_len == 0) 리턴랫 -1; // 반환된 FormatMessage는 실제로 더 짧은 문자입니다. ++ 결과_렌; strncpy(lpResult, tmp, dwBytes); lpResult [dwBytes (공백 1] = 0; LocalFree((HLOCAL) tmp); 동안 (result_len <= dwBytes) 배달 0; 더 나은 result_len을 반환합니다. / *** * 정원 저장 공간이 충분하면 0을 되살리며, 크기는 버퍼의 필수 바이트를 나타냅니다. * 공간이 충분하지 않은 경우 결과 조정에 대해. -1 항상 오류가 발생합니다. * /static int int GetErrorMessageW (DWORD dwErrorCode, LPWSTR lpResult, DWORD dwBytes) LPWSTR-tmp; DWORD 기호; DWORD_result_bytes; nchars는 dwBytes >> 1과 같습니다. result_bytes는 2 * FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM#endif / * GetErrorMessage_H * /
강제 사용 사례(유효한 오류 모드, 그렇지 않으면 -1 확인 필요):
#include #include #include #include int 전통적(int argc, char ** argv) int (* GetErrorMessageA) (DWORD, LPSTR, DWORD); int (* GetErrorMessageW) (DWORD, LPWSTR, DWORD); 결과로 인해 당신은 [260]입니다. wchar_t 결과2 [260]; 주장(LoadLibraryA("GetErrorMessageLib.dll")); GetErrorMessageA는 (int(*)(DWORD, LPSTR, DWORD)) GetProcAddress( GetModuleHandle("GetErrorMessageLib.dll"), "GetErrorMessageA" ); GetErrorMessageW = (int(*)(DWORD, LPWSTR, DWORD)) GetProcAddress( GetModuleHandle("GetErrorMessageLib.dll"), "GetErrorMessageW" ); GetErrorMessageA(33, 결과1, 크기(presult1)); GetErrorMessageW(33, 결과2, 크기(결과2)); 세트(결과1); _putws(결과2); 이익 0;
일반 사용 보호 케이스(오류 코드가 유효하다고 가정하고 이제 컨트롤이 반환해야 하는 완전히 다른 경우):
#include #include "GetErrorMessage.h"#include 정수 소수 (int argc, char ** argv) 부산물이 1이기 때문에 [260]; wchar_t 결과2 [260]; GetErrorMessageA(33, 결과1, 크기(결과1)); 세트(결과1); 결과2, geterrormessagew(33, sizeof(결과2)); _putws(결과2); 되감기 0;
Assembly-Gnu, 즉 MinGW32에서 사용 예
.global _WinMain at 16 .텍스트 섹션_윈메인 @ 16: // eax = LoadLibraryA("GetErrorMessageLib.dll") $ sz0를 누르십시오 call _LoadLibraryA @ 7 // stdcall, 정리가 필요하지 않음 // eax = GetProcAddress(eax, "GetErrorMessageW") 언론 보도 $ sz1 클릭 % eax dub _GetProcAddress at 8 // stdcall, 픽업 필요 없음 // (* eax) (오류 코드, szErrorMessage) 스트레스 $200 푸시 $ szErrorMessage errorCode를 누르십시오 *% eax // cdecl과 접촉, 청소 필요 솔루션 12, % esp 송금 szErrorMessage 연결 중 - __putws // cdecl, cleanup requiredka 4% 추가 $ 16 반환 .Rodata 섹션sz0: .asciz "GetErrorMessageLib.dll"sz1: .asciz "GetErrorMessageW"오류 코드: .long 33 .데이터 섹션szErrorMessage: 크기 200
결과: 다른 경로가 이미지의 일부를 닫았기 때문에 프로세스가 파일에 액세스할 수 없습니다.