본문 바로가기

코드/c/c++39

윈도우 종료 이벤트 받기 MFC 프로그래밍을 하다보면 윈도우 종료시 이벤트를 처리하기 위해 아래의 OnEndSession을 사용해서 많이 처리 하게 됩니다. afx_msg void OnEndSession( BOOL bEnding ); 하지만 해당 맴버 함수는 섹션이 종료 될 때, 즉 로그 오프나 시스템 종료 될때는 판단 할 수 없습니다. 로그 오프나 시스템 종료 시를 판단 하기 위해서는 OnQueryEndSession을 사용하게 됩니다. afx_msg BOOL OnQueryEndSession( ); 하지만 위의 맴버 함수 해당 프로그램의 처리 상태에 대해 리턴하는 것이지 지금 로그 오프인지, 시스테 종료인지에 대해 알려주지 않습니다. 구분하기 위해선 윈도우 핸들러를 직접 생성해서 아래와 같이 WM_QUERYENDSESSION을 .. 2014. 7. 31.
64비트 환경에서 32비트 프로세스에서 64비트 경로 얻기 Wow64EnableWow64FsRedirection() 실제 64비트 윈도우에서 동작하는 32비트 응용 프로그램을 개발하다 보면 앞서 설명한 64비트 윈도우에서 제공하는 파일시스템 접근경로 변경 방식이 문제가 될 경우가 있다. 예를 들어 필자가 개발하는 안티바이러스 프로그램의 경우 악성코드가 시스템 디렉토리에 감염되어 치료를 시도하는데 원하는 경로가 아닌 접근경로 변경이 된 SysWOW64 밑을 접근하게 된다면 원하는 파일에 접근을 할 수 없기 때문에 문제가 된다. 즉, 전체적인 파일시스템을 접근경로 변경이 되지 않는 일반적인 상태로 접근하고 싶을 때는 Wow64EnableWow64FsRedirection() 함수를 사용해서 파일시스템 접근경로 변경을 끄면 된다. 을 참조하면, 32비트 프로세스에서 파.. 2014. 1. 28.
mfc class referent http://msdn.microsoft.com/ko-kr/library/bk77x1wx(v=vs.80).aspx The following classes are included in the MFC Library. Class Header file CAnimateCtrl afxcmn.h CArchive afx.h CArchiveException afx.h CArray afxtempl.h CAsyncMonikerFile afxole.h CAsyncSocket afxsock.h CBitmap afxwin.h CBitmapButton afxext.h CBrush afxwin.h CButton afxwin.h CByteArray afxcoll.h CCachedDataPathProperty afxctl.h CCheck.. 2013. 6. 27.
윈도우 화면 잠금 Window + L #include #define IsWin2000Plus() ((DWORD)(LOBYTE(LOWORD(GetVersion()))) >= 5) int (__stdcall * MyLockWorkStation)(); int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HINSTANCE hinstLib; if (IsWin2000Plus()) { hinstLib = LoadLibrary("USER32.DLL"); if (hinstLib) { MyLockWorkStation = (int (__stdcall *)()) GetProcAddress(hinstLib, "LockWorkStation.. 2013. 6. 25.
PEB32, PEB64 Templete #define PEBTEB_BITS 32 #include "pebteb.h" #undef PEBTEB_BITS #define PEBTEB_BITS 64 #include "pebteb.h" #undef PEBTEB_BITS #pragma pack(push) #pragma pack(1) template struct LIST_ENTRY_T { T Flink; T Blink; }; template struct UNICODE_STRING_T { union { struct { WORD Length; WORD MaximumLength; }; T dummy; }; T _Buffer; }; template struct _PEB_T { union { struct { BYTE InheritedAddressSpace; BYT.. 2013. 2. 15.
프로세스의 PEB 의 Parameter의 필드의 정보를 가져오기 typedef NTSTATUS(WINAPI *NtQueryInformationProcessT)(HANDLE,PROCESSINFOCLASS,PVOID,ULONG,PULONG); typedef NTSTATUS (WINAPI * NtReadVirtualMemoryT)(HANDLE,PVOID,PVOID,ULONG,PULONG); enum { PhpoCurrentDirectory = 0, PhpoDllPath, PhpoImagePathName, PhpoCommandLine, PhpoWindowTitle, PhpoDesktopName, PhpoShellInfo, PhpoRuntimeData, }; typedef struct _XRTL_USER_PROCESS_PARAMETERS { ULONG MaximumLength.. 2013. 2. 14.