728x90


윈도우상에서 서로 다른 장치간의 명령을 전달하는 메시지에 관련된 API 함수

[메시지 관련함수]

BroadcastSystemMessage

-         현재 실행중인 모든 응용 프로그램이나 드라이버로 메시지를 보낸다.

CallMsgFilter

-         메시지를 전달하고 훅 프로시저에 훅 코드를 전달한다.

CallNextHookEx

-         현재 훅 Chain상의 다음 훅 프로시저에 정보를 전달한다.

DefWindowProc

-         메시지 인자값을 정상적인 처리를 위해 메시지 프로시저로 전달한다.

DispatchMessage

-         응용 프로그램의 메시지 루프에서 처리하기에 적절한 윈도우 프로시저로 메시지를 보

낸다.

GetMessage

-         어플리케이션의 메시지 큐에서 메시지를 취득한다.

GetMessageExtraInfo

-         마지막으로 받은 메시지의 추가 정보를 받는다.

GetMessagePos

-         마지막 메시지가 전달되었을 때 화면 좌표의 커서 위치를 알려준다.

GetMessageTime

-         윈도우가 시동된 이후로 경과된 시간을 미리 초 단위로 구한다.

InSendMessage

-         윈도우에서 보내온 메시지와 다른 쓰레드에서 보내온 메시지를 구분한다.

PeekMessage

-         결과값을 보내기 전에 큐에 있는 메시지를 기다리지 않고 메시지가 존재한다면 MSG 구조체에 보관한다.

PostMessage

-         메시지 큐 안에 메시지를 넣고 함수를 끝내고 복귀한다.

PostQuitMessage

-         윈도우를 종료하는 실제적인 함수이다

PostThreadMessage

-         메시지가 수행되기를 기다리지 않고 지정한 쓰레드의 메시지큐에 메시지를 놓는다.

RegisterWindowMessage

-         레지스트리에 특정한 메시지를 등록한다.

ReplyMessage

-         SendMessage() 함수에 전달된 메시지에 응답한다.

SendMessage

-         파라미터로 지정된 윈도우 핸들값을 갖고 있는 위도우나 컨트롤에 지정된 메시지를 보낸다.

SendMessageTimeOut

-         메시지를 처리하는데 TimeOut 시간이 있어서 메시지를 윈도우에 전달한 후 메시지가 처리되거나 TimeOut 시간이 끝날때까지 반환되지 않는다.

SendNotifyMessage

-         지정한 윈도우에 메시지를 보낸다.

SetWindowsHookEx

-         윈도우 메시지 필터 함수를 DLL 이나 응용 프로그램에 설치한다.

TranslateMessage

-         윈도우안에서 사용되는 Virualkey Message Char Message 롤 변환하는 함수이다.

UnhookWindowsHookEx

-         SetWindowsHooksHookEx() 함수에서 설정된 훅 프로시저를 체인에서 제거한다.

WaitMessage

 -  새로운 메시지가 메시지 큐에 들어올때까지 기다린다.


구조체

Type MSG

 hwnd as long

 message as long

 wParam as long

 lParam as long

 time as long

 pt as POINTAPI

End Type

 

hWnd : 이벤트를 발생한 윈도우의 핸들

message : 이벤트에 대응하는 메시지 값으로 정의된 매크로 이름을 사용 한다.

wParam / lParam : 이벤트에 대한 정보 (마우스나 키보드의 눌러진 키값, 마우스의 위치, 시스템 관련 정보) 를 갖고 있음.

 

 time : 메시지가 발생한 시간 (마이크로 초0

 pt   : 화면상의 마우스 위치 정보 (x,y)

 

주요 메시지

 WM_CHAR : 키보드 입력 처리

키보드가 눌러졌을 때 현재 WM_CHAR 가 활성화된 윈도우로 보내진다.

       이때 wParam에는 눌러진 키 값이 ASC코드로 들어가며 lParam 에는 키가 눌러진
       횟수와 눌러진 키가 확장키인지 ALT 키가 같이 눌러졌는지 등의 정보비트를 포함 한다.

WM_COMMAND

     메뉴항목을 선택할 때 발생하는 메시지

 WM_CREATE

       윈도우를 생성하는 메시지

 WM_DESTROY

       프로그램을 종료시키다.

 WM_KEYDOWN

       펑션키 입력 메시지

 WM_LBUTTONDOWN

       마우스의 왼쪽 버튼이 눌러졌을 때 발생되는 메시지

 WM_RBUTTONDOWN

       마우스의 오른쪽 버튼이 눌러졌을 때 발생되는 메시지

 WM_LBUTTONUP

       마우스의 왼쪽 버튼을 놓았을 때 발생되는 메시지

 WM_RBUTTONUP

       마우스의 오른쪽 버튼을 놓았을 때 발생되는 메시지

WM_LBUTTONDBLCLK

      마우스의 왼쪽 버튼 더블클릭시 발생되는 메시지

WM_RBUTTONDBLCLK

      마우스의 오른쪽 버튼 더블 클릭시 발생되는 메시지

WM_PAINT

      윈도우 그리기(화면 제출력)

WM_TIMER

      타이머가 꺼질 때마다 발생되는 메시지

728x90
((( 준비작업 )))

A. 인증서 신청은
  Netscape Object Signing 인증서를 신청
 또는
  Microsoft Authenticode로 받은 인증서를 Netscape로 변환하여 사용

(일반적으로 사용가능한 Microsoft Authenticode 를 받는 편이 유리)

B. pvkimprt 를 통해 받은 spc , pvk 파일을 레지스트리로 import 시킨다.
pvkimprt 다운로드 : http://www.certkorea.co.kr/pds/pvkimprt.exe


   > pvkimprt -import nine4u.spc nine4u.pvk
   a. 비밀번호를 물어보는 창에서 개인키 비밀번호를 입력한다.
   b. 다음
   c. 인증서 종류 기준으로 인증서 저장소를 자동으로 선택 (default) 에 체크 -> 다음
   d. 마침.
   e. 이상으로 레지스트리에 인증서가 import 된다.
   확인: IE(브라우저) 에서 도구>인터넷옵션>내용>인증서 에서 개인탭을 보시면 발급대상에 추가된 인증서 확인가능


C. 인증서에 이름 부여
  a. IE 의 도구 > 인터넷 옵션 > 내용 > 인증서
  b. 인증서 선택
  c. 보기 > 자세히 > 속성편집
  d. 이름입력 후 확인 (예) nine4uCodeSign


D. pvkimprt 를 통해 pfx 파일로 export 시킨다.
   > pvkimprt -pfx nine4u.spc nine4u.pvk
   a. 비밀번호를 물어보는 창에서 개인키 비밀번호를 입력한다.
   b. 다음
   c. 예, 개인키를 내보냅니다. (default) 에 체크 -> 다음
   d. 가능하면 인증 경로에 있는 인증서 모두 포함 (체크)
      그외 체크 모두 없애고 다음
   e. 암호 , 암호확인 입력 후 다음
   f. 파일이름은 저장할 pfx 파일 이름을 입력합니다. (예: nine4u.pfx) 다음.
   g. 마침.


(참고) http://www.certkorea.co.kr/doc.asp?g_dev_conv


((( 코드사인 시작~~ )))

-------
다음은 윈도우 플랫폼에서 Firefox 플러그인 코드사인 방법입니다.

1. Mozilla FTP 사이트에서 최신의 Network Security Services (NSS) 패키지를 다운 받습니다. :
ftp://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/
윈도우 사용자는 NSS_3_9_RTM/WINNT5.0_OPT.OBJ/ 에서 nss-3.9.zip 을 받습니다.


2. 원하시는 곳에 압축을 풉니다. 예)  C:\Apps\nss-3.9\


3. Mozilla FTP 사이트에서 최신의 Netscape Portable Runtime 을 다운 받습니다. 
http://ftp.mozilla.org/pub/mozilla.org/nspr/releases/
윈도우 사용자는 v4.6/WINNT5.0_OPT.OBJ/ 에서 nspr-4.6.zip 을 받습니다.


4. 압축을 풉니다.  예) C:\Apps\nspr-4.6\


5.  NSS 의 bin , lib, nspr 의 lib 를 시스템 path 에 추가합니다.
   제어판 > 시스템 속성 > 고급 > 환경변수 > 시스템변수 에 추가하거나,
   또는 실행시 마다 설정 하실 수 있습니다.

   윈도우의 경우 몇몇 파일들 (예로, certutil.exe) 은 \widnows\system32\ 에 이미 포함되어 있으니,
   새로 추가된 파일들이 실행되도록 하기 위해 추가될 경로는 기존의 path 앞에 위치 시킵니다.

  설정 예)
          C:\> set PATH=C:\Apps\nss-3.9\bin\;C:\Apps\nss-3.9\lib\;C:\Apps\nspr-4.6\lib\;%PATH%


6. NSS 툴 문서 함 읽어 보시고~ (패스 )


7. 인증서 DB 초기화
  인증서 DB 파일을 위치시킬 폴더를 결정합니다. 다음 명령으로 DB 파일을 생성합니다. ( -d 옵션뒤에 . (마침표) 있음)


  Code:
       C:\Projects\CodeSigning\> certutil -N -d .
  => 현재디렉토리에 인증서 DB 파일을 새로 생성 한다.

  다음 내용과 같이 NSS Certificate database 의 password 를 물어 봅니다.
  (중요) 절대 잊어 버리면 안됩니다.
  뒤에도 비번이 나오는데 NSS 인증서 DB 비번과 , 인증서의 개인키 비번은 별개 입니다. 혼동주의!

   Code:
C:\Projects\CodeSigning\> certutil -N -d .
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.

Enter new password:
Re-enter password:


이후 dir 해보시면
cert8.db , key3.db , secmod.db 파일 3개가 생성되어 있음을 확인 할 수 있습니다.


8. 위에서 준비한 pfx 파일을 NSS cert DB 에 import 시킵니다.

Code:
C:\Projects\CodeSigning> pk12util -i "nine4uCodeSign" -d .
Enter Password or Pin for "NSS Certificate DB":  <- 7번 단계에서 입력한 비밀번호
Enter password for PKCS12 file:                  <- 인증서 개인키 비밀번호
pk12util: PKCS12 IMPORT SUCCESSFUL
; nine4uCodeSign 은 위의 C 단계에서 지정한 인증서 이름입니다.


; 다음 명령으로 인증서가 추가된 것을 확인 하실 수 있습니다.
C:\Projects\CodeSigning> certutil -L -d .
nine4uCodeSign                                               u,u,u
Thawte Code Signing CA - Thawte Consulting cc                c,,c



9. 싸인을 위한 XPI 파일을 준비 합니다.

 새로운 폴더를 하나 생성하고 XPI 파일을 생성된 폴더에 카피 후 경로를 포함하여 압축을 풉니다.
 XPI 파일은 삭제하고 NSS DB 폴더로 돌아갑니다.

(주의) xpi zip 파일내의 파일 순서를 지켜줘야 합니다.
       첫번째 파일은 META-INF/zigbert.rsa 파일이 되어야 합니다.
       순서정렬이 가능한 zip 유틸을 사용하셔야 합니다.

Code:
C:\Projects\CodeSigning\> md signed

C:\Projects\CodeSigning\> copy C:\Projects\fsb\fsb.xpi signed
        1 file(s) copied.

C:\Projects\CodeSigning\> cd signed

C:\Projects\CodeSigning\signed> unzip fsb.xpi
Archive:  fsb.xpi
   creating: chrome/
  inflating: chrome.manifest
  inflating: chrome/fsb.jar
  inflating: install.rdf

C:\Projects\CodeSigning\signed> del fsb.xpi

C:\Projects\CodeSigning\signed> cd ..


10. 싸인 합니다.

Code:
C:\Projects\CodeSigning\> signtool -d . -k nine4uCodeSign -p "NSS패스워드" signed/
using certificate directory: .
Generating signed//META-INF/manifest.mf file..
--> chrome/fsb.jar
--> chrome.manifest
--> install.rdf
Generating zigbert.sf file..
tree "signed/" signed successfully

11. XPI 로 다시 패키징 합니다.

signed 폴더로 가서 META-INF/zigbert.rsa 파일을 처음에 오도록 zip 합니다.

Code:
C:\Projects\Certs\> cd signed

C:\Projects\CodeSigning\signed\> zip fsb.xpi META-INF/zigbert.rsa
  adding: META-INF/zigbert.rsa (deflated 35%)

C:\Projects\CodeSigning\signed> zip -r -D fsb.xpi * -x META-INF/zigbert.rsa
  adding: META-INF/manifest.mf (deflated 37%)
  adding: META-INF/zigbert.sf (deflated 40%)
  adding: chrome/fsb.jar (deflated 74%)
  adding: chrome.manifest (deflated 69%)
  adding: install.rdf (deflated 62%)

12. 완료.


인증서 신청  :  THAWTE : www.certkorea.co.kr,  VERISIGN : www.ssl.co.kr

728x90
1. 데이터베이스의 모든 테이블 행을 가장 빨리 세는 방법

SQL 서버 데이터베이스 내에 존재하는 시스템 테이블 `sysindexes`에는 `rows`란 컬럼이 존재한다. 이 컬럼은 테이블에 반영된 행들의 수를 갖고 있다. 다음 SQL문을 실행시키면 원하는 결과를 효과적으로 얻을 수 있을 것이다.

select o.name, rows
from sysobjects o inner join sysindexes i on o.id = i.id
where i.indid < 2
order by o.name

where 절의 "indid<2" 부분은 클러스터드 인덱스(clustered index) 또는 힙(heap) 정보를 찾지 않기 위함이다. 이 결과는 실제로 트랜잭션(transaction)이 일어난 행만 카운트한다.



2. 스토어드 프로시져에 대한 파라미터로 테이블 이름을 사용하는 방법

이것을 위해서는 동적인 SQL을 사용해야 한다. 다음 스크립트를 참조하기 바란다.

Create proc dbcc_table
@tabname varchar(30)
as
BEGIN
Exec ("dbcc checktable (" + @tabname + ")")
END
go

/*** 스토어드 프로시져를 테스트하려면 ***/
dbcc_table syslogs



3. 모든 테이블을 BCP 하기 위한 스크립트 작성 방법

Select "bcp " + db_name() + ".." + name +
" out c:\temp" + name + ".txt /c -t\t -SserverName -UuserID -Ppassword
/b1000"
from sysobjects
where type = "U"
order by name

위의 예는 모든 데이터베이스 객체가 데이터베이스 오우너(owner) 또는 DBO에 의해 소유되었다는 가정 아래 작성되었다. 위의 예는 윈도 커맨드 파일 또는 배치 파일로 저장하여 실행할 수 있는 스크립트를 만들 것이다. 결과물은 탭 구분자로 분리된 텍스트가 될 것이다.



BCP(Bulk Copy Program)에 대한 파라미터에 대해 좀 더 알기 원하면 Books Online에서 BCP를 찾아 보거나, 커맨드 윈도우에서 BCP /?를 실행시켜 보기 바란다.



원한다면 ISQL에서 xp_cmdshell과 함께 실행시킬 수도 있다. 파일 경로에서 나타난 드라이브 문자는 서버에 있는 것이지 클라이언트 PC에 있는 것이 아님을 기억하기 바란다.



위의 스크립트에서 /b 옵션을 준 것을 기억하라. 만일 이 옵션을 사용하지 않으면 대량의 파일을 데이터베이스로 복사할 때 하나의 작업으로 처리하게 된다. 하지만 "/b 1000" 옵션을 사용함으로써 1000라인의 트랜잭션 단위로 작업을 나누어 하게 된다.



4. 어떤 파일이 디스크 상에 존재하는지 조사하는 방법



서버 상에서 파일 정보를 얻으려면 다음과 같이 xp_getfiledetails란 확장 스토어드 프로시져를 사용하면 된다.

Master..xp_getfiledetails "c:\mssql\binn\sqlservr.exe"

5. 남은 디스크 공간을 알아내는 방법



서버에 남아있는 디스크 공간을 알아내려면 다음과 같이 xp_fixeddrives란 확장 스토어드 프로시져를 사용하면 된다. 만일 SQL 서버 6.5에서 실행한다면 Bytes free 컬럼의 실제 단위는 Bytes가 아니라 Megabytes free임을 조심해야 한다.

Master..xp_fixeddrives

6. 리모트 상에서 서버 셧다운(shut down) 시키는 방법



윈도 NT 리소스 킷(Resource Kit)을 보면 shutdown과 shutgui란 두 개의 유틸리티가 있는게 이 유틸리티들을 활용하면 된다. 조심해야할 것은 서버를 바로 재부팅하는 것이 디폴트 옵션이 아니라는 것이다. 만일 이 옵션을 잘못 설정했다면 결국 서버를 작동시키기 위해 서버가 있는 기계쪽으로 가야만 할 것이다.



7. SQL 서버의 자세한 버전 정보를 보는 방법

다음과 같이 xp_msver 스토어드 프로시져를 사용하면 된다.

Master..xp_msver

이 스토어드 프로시져에 대한 MSDN 자료를 보고 싶다면 아래 링크를 클릭하기 바란다.

Master..xp_msver 자세히 보기 - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_xp_aa-sz_0o4y.asp


8. SQL 서버 이벤트 로그 순환시키는 방법

SQL 서버를 관리하다 보면 이벤트 로그 사이즈가 겉잡을 수 없이 커지게되는 것을 볼 수 있다. 많은 사람들은 이 문제를 햐결하기 위해 SQL 서버를 멈췄다가 다시 시작하곤 한다. 하지만 다음과 같이 dbcc errorlog를 이용하면 이 문제를 쉽게 해결할 수가 있다.



dbcc errorlog



이 명령어는 문서화되어 있지 않은 명령어이다. 그렇기 때문에 이 명령어를 사용할 경우 책임은 전적으로 사용자에게 있게 됨을 주의하도록 하자.



9. 서버 레지스트리 값을 읽는 방법



확장 스토어드 프로시져인 XP_REGREAD를 이용하면 서버의 레지스트리 값을 읽어낼 수가 있다. 다음 예는 NT 4 서비스 팩 버전 정보를 레지스트리로부터 읽어 표시하는 예이다.

master..xp_regread @rootkey=`HKEY_LOCAL_MACHINE`,
@key=`SOFTWARE\Microsoft\Windows NT\CurrentVersion`,
@value_name = `CSDVersion`

10. 스토어드 프로시져를 자동으로 실행하게 하는 방법



SQL 서버가 기동될 때마다 자동으로 하나 이상의 스토어드 프로시져를 작동시키고 싶은 경우들이 있다. 예상치 않게 서버가 재부팅됐다거나 SQL 서버가 시작될 때 특정 프로세스를 실행해야할 경우 유용하게 사용할 수가 있을 것이다.



SQL 서버 6.5에서는 master 데이터베이스에 해당 스토어드 프로시져를 저장한 후 다음과 같은 명령을 실행시키면 된다:

sp_makestartup "procedure_name"

SQL 서버 7 또는 2000에서는 대신 sp_procoption 스토어드 프로시져를 사용하면 된다. 이에 대한 자세한 사항은 다음 msdn 자료를 참조하기 바란다.



sp_procoption 설명 보기 : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_pa-pz_95m6.asp



11. 백업하지 않은 데이터베이스 복구시키는 방법

물론 정기적으로 데이터베이스 백업을 점검하고 테스트하는 관리자라면 이 팁은 무시해도 된다.

하지만 어떤 경우 백업을 하지 않아 데이터를 복원할 때 난감해하는 사람이 있을지도 모르겠다. 이럴 경우 .LDF(로그 파일)와 .MDF 파일을 스토어드 프로시져를 이용하여 SQL 서버에 다시 어태치(attach)시킴으로써 데이터를 종종 복원시킬 수도 있다. 항상 가능한 것은 아니지만 안해보는 것보단 나을 것이다.

이와 관련된 스토어드 프로시져는 sp_attach_db이다. 이 스토어드 프로시져에 대한 자세한 설명은 다음 msdn 자료를 참조하기 바란다.

sp_attach_db 설명 보기 : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ae-az_52oy.asp
 
[펌:m2mcomputer.com]

+ Recent posts