반응형

tdifw

TDI 드라이버의 훌륭한 샘플인 tdifw에 대한 정보입니다.

URL: http://sourceforge.net/projects/tdifw/
설명: Simple TDI-Based Open Source Personal Firewall for Windows NT4/2000/XP/2003
방식: TDI Hook Driver | TDI Filter Driver

 

 

반응형
반응형

Office2003에서 Office2007문서 열기

Office 2007이 출시되면서, 리본메뉴라는 새로운 타입의 툴바(?)가 나타났다.
그치만, 영 내 취향에는 맞지 않는 관계로,
설치후 1시간만에 내 컴퓨터에서 삭제되는 비운의 주인공이 됬다.

그치만 Office2003만 쓰기에는 나름의 애로사항이 있었으니,,,
2007
사용자가 늘어나면서 2007 포맷의 업무 문서들이 생겨난 것이다.
pptx, xlsx, docx ...
결구 2007을 다시 깔아야 하는가?

docx
파일을 2003으로 열려고 하니, Office 호환팩 사이트로 연결이 된다.
pptx
는 안되누만...

암튼 아래 링크에서 파일을 받아 설치하면 2003에서도 2007문서를 열어 볼수 있다는 말씀.~

http://www.microsoft.com/downloads/thankyou.aspx?familyId=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displayLang=ko

http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=941B3470-3AE9-4AEE-8F43-C6BB74CD1466

 

 

반응형
반응형

거절을 위한 10가지 충고

 

1. 싫은 것은 거절하라.

 

2. 짧고 분명하게 하라.

 

3. 정직하게 "NO" 하지 못하고 애매하게 말하는 것은 습관임을 알라.

 

4. 상대가 듣기 좋은 말로 위기를 넘기지 말라.

 

5. 본인에게 거절할 귄리가 있음을 알라.

 

6. 형습해 보라.(녹음기를 사용해서)

 

7. 거절할 문구들을 생각해 두라.

 

8. 남의 기분과 똑같이 내 기분도 생각하며 "NO" 하라

 

9. 순간의 거절을 하지 못하면 평생 후회할 수 있음을 알라.

 

10. 정직한 거절은 "Yes" 보다 홀륭한 때도 있다.

 

반응형
반응형

XP 탐색기에서 압축파일 표시 없애기

 

Windows XP에서 탐색기를 통해서 연 폴더에 압축폴더가 있는 경우,
해당 압축파일의 내용을 보여주려 쓸데없는 애를 쓴다
.
이로 인해 탐색기 내의 파일리스트 디스플레이 시간이 오래 걸리곤 하는데
..
다음과 같이 설정하면 뻘 짓을 하지 않는다
.

시작>실행>regsvr32 /u zipfldr.dll

 

반응형
반응형

Windows Mobile 전원 상태 감시

Windows Mobile의 경우, 장치의 특성상
일정 시간 입력이 없는 경우 suspend모드로 변경되는 경우가 잦게 일어 난다.

본 포스트에서는 특정 어플리케이션에서 전원상태의 변환을 감지하는 방법에 대해 기술한다.

주제의 핵심은
RequestPowerNotifications() 함수로 요약된다.
이 함수를 통해 전원의 변화 상태를 통지받겠다고 등록하면,
전원 상태가 변경될때마다, 통지를 해준다.
. 일반 윈도우 메시지 큐로 전달되는것이 아니라 별도의 윈도우 메시지 큐를 생성해야 한다.


// 전원변화상태통지를요청

BOOL RegisterPwNotify()

{

             m_nBufferSize = (MAX_PATH+sizeof(POWER_BROADCAST))*MAX_MESSAGES;

             m_pBuffer = new BYTE[m_nBufferSize];

             MSGQUEUEOPTIONS msgOptions = {0};

             msgOptions.dwSize = sizeof(MSGQUEUEOPTIONS);

             msgOptions.dwFlags = 0;

             msgOptions.dwMaxMessages = MAX_MESSAGES;

             msgOptions.cbMaxMessage = sizeof(POWER_BROADCAST) + MAX_PATH;

             msgOptions.bReadAccess = TRUE;

             m_hQueue = CreateMsgQueue(NULL, &msgOptions);

             if (! m_hQueue)

             {

                           MessageBox(g_hWnd, TEXT("Error: CreateMsgQueue"), TEXT("Error!"),

MB_OK|MB_APPLMODAL|MB_ICONSTOP);

 

                           return FALSE;

             }

 

             HANDLE hThread = CreateThread(0, 0, ThreadProc, 0, 0, 0);

             if (! hThread)

             {

                           MessageBox(g_hWnd, TEXT("Error: CreateThread"), TEXT("Error!"),

MB_OK|MB_APPLMODAL|MB_ICONSTOP);

 

                           return FALSE;

             }

 

             m_hRequest = ::RequestPowerNotifications(m_hQueue, POWER_NOTIFY_ALL);

             if (!m_hRequest)

             {

                           MessageBox(g_hWnd, TEXT("Error: RequestPowerNotifications"), TEXT("Error!"),

MB_OK|MB_APPLMODAL|MB_ICONSTOP);

                           return FALSE;

             }

             CloseHandle( hThread );

             return TRUE;

}

 

// Thread를통해위에서생성한메시지큐를감시한다.

void Run()

{

             TCHAR szChar[100];

 

             memset(m_pBuffer, 0, m_nBufferSize);

 

             DWORD dwReaded = 0;

 

             DWORD dwFlags = 0;

 

             while ( TRUE )

             {

                           memset(m_pBuffer, 0, m_nBufferSize);

                           DWORD dwReaded = 0;

                           DWORD dwFlags = 0;

                           if (::ReadMsgQueue(m_hQueue, m_pBuffer, m_nBufferSize, &dwReaded,

MAX_MESSAGES, &dwFlags))

                           {

                                        if (dwReaded >= sizeof(POWER_BROADCAST))

                                        {

                                                     WCHAR szCahr[256] = {0};

 

                                                     POWER_BROADCAST* pb = (POWER_BROADCAST*)m_pBuffer;

                                                     if ( pb->Message & PBT_POWERINFOCHANGE )

                                                     {

                                                                  wsprintf(szChar, L"msg=PBT_POWERINFOCHANGE");

                                                     }

                                                     else if ( pb->Message & PBT_POWERSTATUSCHANGE )

                                                     {

                                                                  wsprintf(szChar, L"msg=PBT_POWERINFOCHANGE");

                                                     }

                                                     else if ( pb->Message & PBT_POWERINFOCPBT_RESUMEHANGE )

                                                     {

                                                                  wsprintf(szChar, L"msg=PBT_RESUME");

                                                     }

                                                     else if ( pb->Message & PBT_TRANSITION )

                                                     {

                                                                  wsprintf(szChar, L"msg=PBT_TRANSITION");

                                                     }

 

                                                     if ( pb->Flags & POWER_STATE_BOOT )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=POWER_STATE_BOOT", szChar);

                                                     }

                                                     else if ( pb->Flags & PPOWER_STATE_CRITICALOWER_STATE_BOOT )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=

PPOWER_STATE_CRITICALOWER_STATE_BOOT", szChar);

                                                     }

                                                     else if ( pb->Flags & POWER_STATE_IDLE )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=POWER_STATE_IDLE", szChar);

                                                     }

                                                     else if ( pb->Flags & POWER_STATE_ON )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=POWER_STATE_ON", szChar);

                                                     }

                                                     else if ( pb->Flags & POWER_STATE_OFF )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=POWER_STATE_OFF", szChar);

                                                     }

                                                     else if ( pb->Flags & POWER_STATE_RESET )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=POWER_STATE_RESET", szChar);

                                                     }

                                                     else if ( pb->Flags & POWER_STATE_SUSPEND )

                                                     {

                                                                  wsprintf(szChar, L"%s, flag=POWER_STATE_SUSPEND",

szChar);

                                                     }

                                                     if ( pb->Message&PBT_POWERINFOCHANGE )

                                                     {

                                                                  wsprintf(szChar, L"%s, SystemPowerState=", szChar);

                                                     }

                                                     else

                                                     {

                                                                  wsprintf(szChar, L"%s, SystemPowerState=%s", szChar,

pb->SystemPowerState);

                                                     }

                                                     MessageBox(g_hWnd, szChar, TEXT("test"),

MB_OK|MB_APPLMODAL|MB_ICONSTOP);

                                        }

                           }

             }

}

 

// 통지등록을제거한다.

BOOL UnRegisterPwNotify()

{

             if ( m_hQueue)

             {

                           CloseMsgQueue(m_hQueue);

                           m_hQueue = NULL;

             }

             if ( m_hRequest )

             {

                           StopPowerNotifications( m_hRequest );

                           m_hRequest = NULL;

             }

             return TRUE;

}

 

 

 

 

 

반응형
반응형

WDK VC6.0에서 빌드되지 않는다.


APP
개발 7년차에 새로 맡게된 드라이버 개발 업무.
새로운 마음으로 드라이버 개발 스터디를 시작했다
.

처음에는 Chris Cant Windows Driver Model에 나온대로 makefile프로젝트를 만들어 사용했지만
,
새 프로젝트 생성 할 때마다, 성가시다
.
"
실용주의 프로그래머"에서 그랬던가
?
단순 반복작업을 끊임없이 반복하지 말라고. 자동화 프로세스를 생성하라고
...

의욕에 넘쳐, 드라이버 개발 AppWizard도 만들고

쌍으로 동작하는 드라이버 테스트 AppWizard도 만들었다.

AppWizard
를 만들어서 Filter-Hook드라이버를 생성해 보니
,
... 스스로도 만족스러웠다
.

근데
...
해당 드라이버의 Vista버전을 만들기 위해, WFP Callout 드라이버를 작성하다보니

이 넘은 WDK가 필요하다.

출근하자 마자 DDK를 지우고 WDK 개발 환경을 구축했다
.

두근거리는 마음으로 빌드를 해 보았건만
....
"Compiler version not supported by Windows DDK"
이런 놈의 에러가 뜬다.

위치는 ntddk.h

#if _MSC_VER < 1300
#error Compiler version not supported by Windows DDK
#endif

"
.. 뭐야? VC6.0으로는 빌드가 안되는 거야"

이리저리 자료를 찾아보니, 눈에 들어오는 문장이 있다
.
"참고로 WDK VisualStudio 6.0에서는 컴파일 되지 않습니다"

OTL ...

삽질 한거란 말이더냐?
암튼 안된단다
.

Visaul Studio 2005
를 이용해 빌드하는 방법은 눈에 띈다.
그치만 makefile프로젝트인걸
...

꿩대신 닭! 해당 정보는 아래 블로그를 참조
.
http://www.hollistech.com/Resources/ddkbuild/ddkbuild.htm
http://blog.naver.com/ikoguryo?Redirect=Log&logNo=10022487837
http://octet.egloos.com/1085023

 

반응형

'Windows Programming > 드라이버' 카테고리의 다른 글

Run-time String 함수와 kernel String함수의 대응관계  (0) 2008.10.17
[TDI Filter Driver] tdifw  (0) 2008.09.23
Filter-Hook Driver  (0) 2008.07.21
Network Driver의 종류  (0) 2008.07.21
DeviceObject 삭제  (1) 2008.06.20

+ Recent posts