CD 굽는데 가장 일반적으로 사용되는 Nero 프로그램입니다.
일반적으로 데이터를 단순히 저장용도로 사용하기 위해 굽는 방법입니다.
CDP나 오디오에서 음악을 재생시킬때 사용되는 오디오 cd를 굽는 방법입니다.
cd를 복사하여 같은 cd를 굽고자 할 때 사용하는 방법입니다. 가상 시디롬을 이용하여 이미지 파일을 cd로 굽고자 할 때 이 방법을 이용합니다.
현재 제 컴퓨터 드라이브 상태입니다.
E:드라이브는 실제 물리적인 cd-rom이 할당되어 있는 드라이브이고, F:드라이브는 데몬으로 인식시킨 가상의 cd-rom드라이브입니다.
F:드라이브에 Adobe Acrobat 9.iso이미지를 불러와 마치 F: 드라이브에 Adobe Acrobat 9 cd가 들어있는것처럼 인식시켰습니다. (데몬 사용법 참조)
이 상태에서 복사하기를 하면 Adobe Acrobat 9 CD를 생성할 수 있습니다.
: 프로세서가 실행하는 명령어의 순서를 바꾸는 사건
인터럽트는 흔히 동기적(Synchronous)인 인터럽트와 비동기적(Asynchronous)인 인터럽트로 나뉩니다.
동기적 인터럽트는 CPU가 명령어를 실행하는 도중에 발생하는데, 실행중인 명령어의 실행을 마친 뒤에 이를 발생시킵니다. 보통 ‘예외’라고 명시합니다. 프로그래밍을 할때 예외처리 부분을 구현하는데, 이처럼 에러나 커널이 처리해야 비정상적인 상황에 CPU가 이 상황에 대처하기 위한 작업들입니다.
비동기적 인터럽트는 다른 하드웨어 장치가 CPU의 클록 신호와는 상관없이 즉각적으로 발생시킵니다. 보통 인터럽트라하면 이 비동기적 인터럽트를 말합니다. 입출력장치에 의한 경우와 같이 외부의 돌발적인 상황이 발생하였을 경우 CPU는 실행중인 작업들을 일시 중지하고 정해진 인터럽트 작업을 수행하게 됩니다.
: CPU가 명령어를 실행하다가 비정상적인 상황을 감지할 때 발생. cpu가 예외를 발생시킬 때 커널 모드 스택에 저장장하는 eip 레지스터의 값에 따라 3분류로 나뉩니다.
Faults : 저장된 eip 값은 폴트를 일으킨 명령어의 주소이기 때문에 일반적으로 고칠 수 있으며, 고쳐지면 해당 프로그램은 재시작되어 하던 작업을 이어서 수행할 수 있습니다. 자주 볼수 있는 ‘페이지 폴트’가 이에 해당됩니다.
Traps : 트랩을 발생시키는 명령어를 실행하자마자 발생합니다. 프로그램은 커널로부터 제어권을 다시 돌려 받은 후에 이어서 실행할 수 있습니다. eip에는 트랩을 발생시킨 명령어 다음에 실행해야 하는 명령어의 주소입니다. 즉, 트랩은 종료한 명령어가 다시 이어서 수행될 필요가 없을때 사용됩니다. 트랩의 주용도는 디버깅입니다. 디버깅할때 braking point가 이해 해당됩니다.
Aborts(중단) : 하드웨어 고장이나 시스템 테이블에 잘못된 값이 들어가 있는 경우가 같이 심간한 오류 상황이 생겼을때 발생합니다. eip 레지스터에 예외를 일으킨 정확한 위치를 저장하지 못하는 경우가 많습니다. 이 예외가 발생하였을 경우에는 문제가 발생한 프로세스를 강제로 종료하는 수 밖에 없습니다.
: 프로그래머의 요청이 int, int3 명령어에 의해 발생합니다.
Overflow나 Bound(주소범위 조사)명령어에서 프로그래밍에 의해서 예외를 발생시킵니다. cpu는 이 예외를 Traps로 처리합니다. 이 예외의 일반적인 용도는 시스템 콜을 구현하거나 디버거에 특별한 사건이 발생하였음을 알리기 위한 용도로 사용됩니다.
장치에서 인터럽트 신호발생
이 시스템 테이블은 각 인터럽트와 인터럽트 핸들러의 주소, 예외 벡터와 예외 핸들러의 주소를 연결합니다. 각 엔트리는 인터럽트 벡터 또는 예외 벡터 하나에 대응합니다. IDT에는 세 종류의 이스크립터가 들어갈 수 있습니다.
Task gate
인터럽트 신호가 발생할 때 현재 프로세스를 대체할 프로세스의 TSS 셀렉터를 가진다.
Interrupt gate
인터럽트나 예외 핸들러의 세그먼트 셀렉터와 세그먼트 내 오프셋을 가진다. 해당 세그먼트로 ㅈ제어를 넘길 때 프로세서는 IF 플래그를 0으로 만들어 마스크 가능한 인터럽트가 더는 발생하지 않게 한다.
Trap gate
인터럽트 게이트와 비슷하지만 해당 세그먼트로 제어를 넘길 때 프로세서가 IF플래그를 바꾸지 않는다는 차이점이 있다.
선택한 세그먼트 디스크립터의 DPL과 CPL이 다른지 검사한다. 만약 다르다면 제어 유닛은 새로운 특권 수준에 맞는 스택을 사용해야 한다
current 프로세스의 TSS 세그먼트에 접근하기위해 tr 레지스터를 읽어 들인다.
새로운 특권 수준과 관련된 올바른 스택 세그먼트와 스택 포인터의 값으로 ss와 esp 레지스터를 설정한다. 이 값은 TSS에 들어있다.
이전 특권 수준과 연계된 스택의 논리 주소 ss와 esp의 이전 값을 새로운 스택에 저장한다.
인터럽트나 예외를 처리하고 나면 제어권을 원래 프로세스로 돌려주어야 한다.
프로세스에 비정상적인 상황을 알려주기 위한 목적의 시그널을 송신하기 위해 필요.
trap_init() : 예외에 관한 모드 IDT entry에 최종적인 값, 즉 예외를 처리하는 함수들을 지정.
set_trap_gate(0, ÷_error);
set_trap_gate(1, &debug);
set_intr_gate(2, &nmi);
set_system_intr(3, &int3);
set_system_gate(4, &overflow);
set_system_gate(5, &bound);
set_trap_gate(6, &invalid_op);
set_trap_gate(7, &device_not_available);
set_task_gate(8, &31);
set_trap_gate(9, &coprocessor_segment_overrun);
set_trap_gate(10, &invalid_TSS);
set_trap_gate(11, &segment_not_present);
set_trap_gate(12, &general_protection);
set_intr_gate(14, &page_fault);
set_trap_gate(15, &coprocessor_error);
set_trap_gate(17, &alignment_check);
set_trap_gate(18, &machine_check);
set_trap_gate(19, &simd_coprocessor_error);
set_system_gate(128, &system_call);
위의 함수들을 trap_int()에서 호출함으로써 예외를 처리하는 함수들을 지정.
ret_from_exception() : 스택에 저장한 사용자 모드 레지스터 주소와 하드웨어 에러 코드를 스택에서 꺼낸 후 jmp 명령어 수행
인터럽트는 관련된 프로세스가 중단된 후 한참 후 또는 관련 없는 프로세스가 실행 중일 경우 시그널이 도착하는 경우가 많음
-> 현재 수행중인 프로세스에 무작정 시그널을 보내면 안됨
Visual Studio를 깔아놓으니까 먼 충돌을 이리 많이 일으키는지.. 툭하면 오류나서 디버깅할거냐고 물어보고 해서 제 컴터에서 기본적으로 필요한 프로세스에 대해서 정리 한번 해놓고자 합니다.
주로 방화벽이나 보안과 관련되어 실행되기 때문에 간단하게 말하자면 방확벽 프로세스라고 할 수 있습니다. 다른 응용프로그램들이 클라이언트에서 서버로 포트 통신을 할 때, 수동 TCP/UDP 포트를 동적으로 사용 할 수 있도록 해주는 역확을 합니다.
Windows 작업 관리자 프로세스입니다.
인텔 그래픽 관련 프로세스 입니다.
인텔 그래픽 관련 소프트웨어를 설치하면 실행되는 단축기 관련 프로세스입니다.
레노버 ThinkPad 제품에서 실행되는 프로세스입니다. 소위 말하는 ‘빨콩(TrackPoint)’을 위한 프로세스입니다.
프린트 관련 프로세스입니다. 컴퓨터와 프린트 사이의 데이터 전송 속도의 차이를 해결하기 위한 스풀 기능을 위한 프로세스입니다.
Microsoft Service Host Process로써 DLL로 실행되는 프로세스들을 그룹화 하는데 사용됩니다.
유저 정보를 정리해주는 프로세스입니다.
아도비사에 만든 “Bonjour”서비스라고 하네요. 아도비사 프로그램을 설치하면 자동으로 실행되는 프로세스입니다.
제거하는 자세한 방법 : http://badnom.com/139
마이크로소프트 SQL Sever 응용프로그램입니다.
제거하는 제사한 방법 : http://www.windowexe.com/bbs/board.php?bo_table=board01_s&wr_id=383
nProtect사의 키보드 보안 프로그램입니다. 평소에는 아무일도 하지 않고 가만히 있다가 키보드 보안이 필요할때 실행되는 프로세스입니다.
게임이나 인터넷 뱅킹하시다보면 자동으로 설치되는 프로그램입니다.
마이크로소프트사에서 제공하는 다국어 문자입력 서비스입니다.
IBM 노트북에서 사용되는 파워관련 프로세스입니다.
윈도우 로그온시 계정과 윈도우의 보안정책을 연결시켜주는 연확을 합니다.
시스템 서비스의 시작, 중지 및 시스템 서비스와의 상호 작용을 담당하는 서비스 제어 관리자입니다.
로그인 관리자로 로그인과 로그아웃을 처리합니다.
Clinet/Server Run-time SubSystem의 약어로써 콘솔 윈도우, 쓰레드의 생성/삭제, 16비트 가상 머신의 처리를 담당합니다.
이 프로세스는 강제로 종료할 수 없기때문에 문제가 생기면 조금 골치가 아픕니다.
문제가 생겼을 경우 : http://blog.naver.com/aoobc?Redirect=Log&logNo=70084948457
Session Manager SubSystem의 약어로써 사용자 세션을 위한 프로세스입니다.
문제가 생겼을 경우 : http://blog.naver.com/aoobc?Redirect=Log&logNo=70084948457
윈도우 업데이트 관련 프로세스입니다.
그리드 방식으로 데이터를 업로드 시키는 프로세스입니다. 주로 p2p나 웹하드에 접속시 사용되는 프로세스입니다.
하드디스크에 무리를 많이 주는 프로세스이므로 사용하지 않는 경우 종료시켜놓는게 좋습니다.
MS에서 제공하는 윈도우 보안센터 풍선 도움말 프로세스입니다.
고급 입력 서비스 프로세스입니다. 거의 사용되지 않는 프로세스입니다. 제거하는 자세한 방법 : http://qaos.com/article.php?sid=1362
NDIS 드라이버도 여타 다른 드라이버와 마찬가지로 IRP를 이용하여 통신하면 됩니다.
IRP를 이용한 통신은 시스템 버퍼에 데이터를 넣고 드라이버나 어플쪽에서 다시 시스템 버퍼에 접근하여 데이터를 가져오는 방식으로 데이터를 교환하게 됩니다.
드라이버와 App가 연결되었을때 IRP_MJ_CREATE메세지가 생성되고, 해제되었을 때 IRP_MJ_CLOSE 메세지가 생성됩니다. 그리고 App에서 드라이버로 입력이 있을경우 IRP_MJ_DEVICE_CONTROL 메세지가 생성됩니다. 이렇게 생성된 IRP메세지를 저장하고 있는 Irp스택에서 메세지를 가져와 해석하여 App가 어떤 일을 수행하고 있는지를 알수 있습니다.
Passthru에서는 PtDispatch()에 IRP관련된 코드들이 있습니다. 이를 수정하여 드라이버에서 어플에서 보낸 데이터를 가져오는 소스입니다.
먼저 사용할 IOCTL 코드를 만듭니다. CTL_CODE를 이용하여 생성하면 됩니다.
#define IOCTL_EXAMPLE_SAMPLE_DIRECT_IN_IO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_IN_DIRECT, FILE_READ_DATA | FILE_WRITE_DATA)
#define IOCTL_EXAMPLE_SAMPLE_DIRECT_OUT_IO CTL_CODE(FILE_DEVICE_UNKNOWN,0x801, METHOD_OUT_DIRECT, FILE_READ_DATA | FILE_WRITE_DATA)
#define IOCTL_EXAMPLE_SAMPLE_BUFFERED_IO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
#define IOCTL_EXAMPLE_SAMPLE_NEITHER_IO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
METHOD_IN_DIRECT METHOD_IOUT_DIRECT METHOD_BUFFERED <– 요놈 METHOD_NEITHER
FILE_READ_DATA | FILE_WRITE_DATA <– 이부분이 버퍼에 접근 옵션입니다. 이 옵션에 따라서 SystemBuffer에 IO매니저가 하는 일이 조금 달라지는것 같습니다. FILE_ANY_ACCESS<– 이 옵션으로 해놓은 경우에 어플에서 드라이버로는 갈떄는 시스템버퍼에 데이터를 복사하는데, 다시 드라이버에서 어플로 돌아갈때 시스템버퍼에 잇는 값을 어플에서 받은 outBuffer로 복사하지를 않습니다. (이거때문에 엄청 고생했네요…-_-)
드라이버 입출력하는 방법은 여러가지가 있는데 그중에 METHOD_BUFFERED 방식을 다룰겁니다.
어플에서 DeviceIoControl를 호출하면 드라이버에서선 IRP_MJ_DEVICE_CONTROL 메세지를 날리는데, 이때 SystemBuffer의 주소값을 얻어 여기에 데이터를 읽고 쓰면 됩니다.
[응용프로그램 <->IO관리자<->드라이버]
Access2007부터 확장자가 accdb로 바뀌었습니다. C#에서는 OleDB를 이용하여 연결하면 됩니다.
CrystalReport로 데이터 전달하는 방법입니다.
CrystalReport에 Parameter Fields 추가
추가한 변수를 폼에 드래그하여 추가해줍니다.
Form에서 생성한 파라메터 변수로 데이터를 넘겨줍니다.
crDocz.SetParameterValue(“Data1”, “데이터를 넘기자!!”);
//SetParameterValue(“Parameter Fields 이름”, “넘길 데이터”)
Tip. 만약 데이터를 넘겨주지 않고 실행하면 출력창이 뜨면서 데이터를 입력하라는 창이 나옵니다.
그리고 데어터를 넘겨줄때와 넘겨주지 않을때가 있어서 넘겨주지 않을 경우 해당 필드가 출력창에 나오지 않기를 원하는 경우 SetParameterValue(“Parameter Fields 이름”, “”) 이렇게 해주면됩니다.