개발

[DDK] Using rules of SpinLock

스핀 락은 참 오묘한 문제이다. 하지만 알고 보면 간단한 로직으로 해결할 수 있다!!  일단 동기화 문제에 직면하게 되면, ( 멀티 프로세서 ) 우리가 익히 알고 있는 세마포어(Semaphore)같은 방법을 사용해서 락킹(Locking)을 해야한다. 이것을 제대로 해주지 않는다면 데드락(DeadLock)에 빠지게된다.  데드락은 운영체제때 들었을 것이다. 여러 스레드가 임계영역(Critical Section)에 들어가기 위해서, 경쟁을 할 것이다.  하나의 스레드가 스핀락을 사용하고 있을 […]

[DDK] Using rules of SpinLock 더 읽기"

[DDK] DRIVER_OBJECT 구조체를 알아보자!!

DRIVER_OBJECT와 DEVICE_OBJECT 구조체는 중요하다. 두개가 헷갈려 하는 경우도 많은데, 일단 DRIVER_OBJECT는 함수포인터로 구성되어 있다. 나머지 필드는 직접 수정을 하면 안되는 부분도 있다. typedef struct _DRIVER_OBJECT   {      CSHORT Type;      CSHORT Size;      PDEVICE_OBJECT DeviceObject;      ULONG Flags;      PVOID DriverStart;      ULONG DriverSize;      PVOID DriverSection;      PDRIVER_EXTENSION DriverExtension;    

[DDK] DRIVER_OBJECT 구조체를 알아보자!! 더 읽기"

[DDK] APC가 대체 뭘까?!?

리소스 오브젝트 공부를 하다 보면, APC란게 많이 나온다. 일단 APC_LEVEL이라고, PASSIVE_LEVEL과 DISPATCH_LEVEL 사이에 존재하는 상수값 2의 APC가 존재한다.  그렇다면 APC란게 정확하게 무엇인지 알아보자!!@! APC( Asynchronous Procedure Call )  APC는 스레드를 위한 제어 흐름에 영향을 미칠 수 있는 방법으로, 특정 스레드를 목표로 해야한다. 모든 디바이스 컨텍스트는 실행이 될때 어느 스레드에서 실행이 될지 모른다, 스레드가 생성하고 그

[DDK] APC가 대체 뭘까?!? 더 읽기"

[DDK] DriverExtension 과 DeviceExtension의 차이점

일단 DriverExtension에 대해서 알아보면, typedef struct _DRIVER_EXTENSION   {        PDRIVER_OBJECT DriverObject;        LONG * AddDevice;        ULONG Count;        UNICODE_STRING ServiceKeyName;        PIO_CLIENT_EXTENSION ClientDriverExtension;        PFS_FILTER_CALLBACKS FsFilterCallbacks;   } DRIVER_EXTENSION, *PDRIVER_EXTENSION;   <TEXTAREA class=”cpp” style=”DISPLAY: none” name=code rows=10 cols=60>typedef struct _DRIVER_EXTENSION { PDRIVER_OBJECT DriverObject; LONG *

[DDK] DriverExtension 과 DeviceExtension의 차이점 더 읽기"

[DDK] DISPATCH_LEVEL 에서 Paging 이 불가능한 이유

제일 처음에 책을 읽으면서, 왜 DISPATCH_LEVEL에서 페이징이 불가능할까? 책에서는 모두 당연하다는 듯이 non-paged 메모리에 있어야 한다고 했다. 그리고는 전역변수에 동기화 객체를 선언했다. 참 알쏭달쏭했다. 전역변수 영역이 왜 페이징이 안되는가, 그리고 왜 DISPATCH_LEVEL에서는 페이징이 허용 안되는가? 이제 궁금증이 풀린 것 같다. 다음 코드를 보자. 이병오씨의 “윈도우 파일 시스템” 책에 있는 코드이다. view plaincopy to clipboardprint? //스핀

[DDK] DISPATCH_LEVEL 에서 Paging 이 불가능한 이유 더 읽기"

[Kernel] Windows의 메모리 관리

요즘 영어 공부가 더 재밌는,, 아아,, ㅠ_ㅠ  각설하고,,  C/ C++ 프로그래머나 Device Driver 작성을 하는 프로그래머에게 있어서 운영체제의 메모리 관리는 아주 중요한 부분이다.  뭐 비주얼 베이직이나 C#같은 걸 하는 사람들은 몰라도 상관없다, 충분한 메모리가 확보되면 아무런 문제도 일어나지 않기 때문이다.  그중 Windows 환경에서 프로그래밍을 하는 프로그래머들은 Windows 메모리 관리의 핵심인 가상 메모리와 페이징에 대해서 잘

[Kernel] Windows의 메모리 관리 더 읽기"

[DDK] Lookaside List 란?

내가 왜 Lookaside List를 찾고 공부하고 있는 지는 모르겠지만,, 스케쥴표에 할일을 보니, Lookaside List 공부? 라는게 적혀있었다.  흐음, 그제나 저제나 한번 알아볼까나,   일단 Zone 영역을 알아보자, Zone 영역은 Windows NT 3.51 이전 버전에서 고정된 크기의 메모리 할당과 해제를 효율적으로 관리하기 위해서 Windows NT 실행부가 지원하는 구조체 이다.  요약하면, Lookaside List나 Zone 영역은 Microsoft가 메모리

[DDK] Lookaside List 란? 더 읽기"

[DDK] Sfilter 디바이스 드라이버와 어플리케이션 통신

SFilter를 사용하고자 하면, 종류가 다르다. 2000 버전에서 사용하는 SFilter는 정적 로딩이고, XP버전으로 새로나온 SFilter는 동적 로딩도 가능하다. 다들 그냥 Filemon으로 동적 후킹을 하는 경우가 많다. 그것도 좋은 방법 이지만 볼륨관련작업을 하기 위해서는 SFilter도 접근해보는게 좋다. Sfilter에서 드라이버와 통신하기 위해서는 심벌릭 링크를 생성해야한다.   /**           심볼릭 링크를 생성하는 루틴    

[DDK] Sfilter 디바이스 드라이버와 어플리케이션 통신 더 읽기"

[DDK] 비스타와 XP의 디렉터리 쿼리의 차이점

폴더를 감추는 방법은 다양하다. 다양하지만 정형화된 방법으로 인해서 더이상 아이디어가 나오지 못하는 형편이다,,큭 일단 XP의 상황에서 IRP_MJ_DIRECTORY_CONTROL의 MAJOR IRP가 날라오면, MINOR로 IRP_MN_QUERY_DIRECTORY이다. 이때 여기에 감추는 루틴을 작성하면 된다. 근데 XP와 VISTA는 사용하는 Class가 다르다는 것이다,, – _-; 삽질끝에 알았는데, XP의 경우 폴더 목록 요청시 Class가 FileBothDirectoryInforamation이고, Vista의 경우에는 FileIdBothDirectoryInformation을 사용하더라,, 췌   NTSTATUS InitializeHiddenFileList()  

[DDK] 비스타와 XP의 디렉터리 쿼리의 차이점 더 읽기"

[DDK] 파일 시스템 드라이버의 FastIoDispatch 루틴

Filemon과 SFilter를 예로 들어서 설명하자, 일단 Filemon은 동적 필터 드라이버이다. SFilter와는 다르게 재부팅을 요하는 만큼의 작업은 필요가 없다. 단지 파일의 입출력을 감시할뿐, 이정도의 기능이라면 SDT 후킹을 해서 구현할 수도 있을 것 같다, 하지만 내부적으로 엄청나게 잘짜놨겠지, – _-; 일단 DriverEntry()를 보면 다음과 같은 루틴이 존재한다. 파일 시스템 필터 드라이버를 작성하다보면, Fast I/O에 대해서 많이 보게

[DDK] 파일 시스템 드라이버의 FastIoDispatch 루틴 더 읽기"

[DDK] Windows NT드라이버 개발자들을 위한 정보 - 피해야 할 사항들

요약 loadTOCNode(1, ‘summary’); 다음은 Windows NT 장치 드라이버들을 만들기 위한 정보 입니다. 나타난 정보는 모든 기술에 적용됩니다. 이것은 드라이버 문제를 해결하기 위한 점검 목록으로도 사용될 수 있습니다. 아래에 기술된 정보를 효과적으로 사용하기 위해서 Windows NT 구조에 대한 기본 지식과 일부 장치 드라이버 개발 경험이 필요합니다. 장치 드라이버 개발에 대한 추가 정보를 보시려면 MSDN Professional 멤버쉽을

[DDK] Windows NT드라이버 개발자들을 위한 정보 - 피해야 할 사항들 더 읽기"

[DDK] MS에서 공개하지 않은 함수 ObOpenObjectByName() 내부 코드

NTSTATUS    STDCALL   ObOpenObjectByName(     POBJECT_ATTRIBUTES ObjectAttributes,     POBJECT_TYPE ObjectType,     PVOID ParseContext,     KPROCESSOR_MODE AccessMode,     ACCESS_MASK DesiredAccess,     PACCESS_STATE PassedAccessState,     PHANDLE Handle     )   {      UNICODE_STRING RemainingPath;      PVOID Object = NULL;      NTSTATUS Status;        DPRINT(“ObOpenObjectByName()\n”);      

[DDK] MS에서 공개하지 않은 함수 ObOpenObjectByName() 내부 코드 더 읽기"

[DDK] Recognizer

필터 드라이버를 등록할때 레코그나이져(인식기)가 사용된다. 일단 지금 필터를 등록하는데 앞으로 등록되는 VDO보다는 지금 등록되어 있는 VDO에 기존의 필터를 붙이는게 중요하다, 백신을 보면 재부팅을 안하고 필터를 다 붙이는 기술을 지니고 있다. 이것은 OSR에서 만든 레코그나이저를 사용하는 듯한데,, 일단 A사의 V백신 및 N사의 P백신을 보면 필터 드라이버를 붙이는 모습을 볼 수 있다. 기본적으로 디바이스 트리에 FsRec라는 게

[DDK] Recognizer 더 읽기"

[DDK] Bug check 0x50 PAGE_FAULT_IN_NONPAGED_AREA 추적방법

What Happened? To understand this bugcheck code, it’s first necessary to understand what a “page fault” is. If you’re not completely sure you understand this concept, read the article So, Exactly What Is A Page Fault here at OSR Online. The Windows Memory Manager reserves pre-defined ranges of kernel virtual address space for specific uses.

[DDK] Bug check 0x50 PAGE_FAULT_IN_NONPAGED_AREA 추적방법 더 읽기"

[DDK] MS에서 사용하는 Common Naming Prefix

Prefix Component ———Cc ——————-Cache manager Cm Configuration manager Ex Executive support routines FsRtl File system driver run-time library Hal Hardware abstraction layer Io I/O manager Ke Kernel Ks Kernel Streaming Lpc Local procedure call Lsa Local security authentication Mm Memory manager Nt Windows system services (most of which are exported as Windows functions) Ob Object

[DDK] MS에서 사용하는 Common Naming Prefix 더 읽기"

윈도우즈 디바이스 드라이버 개발 방법

윈도우즈 디바이스 드라이버 개발 방법 디바이스 드라이버 개발을 처음 시작하시는 분들이 가장 많이 하시는 질문은 ” 디바이스 드라이버를 개발하려면 무엇을 어떻게 공부해야 하나요 ? ” 라는 것이다 . 일반 애플리케이션 프로그램 개발을 시작하는 경우에는 자료도 많고 , 주변에 개발자들도 많아서 공부 방법이나 자료들을 쉽게 접할 수 있는데 , 디바이스 드라이버 분야는 개발자들이 많은 분야도 아니고

윈도우즈 디바이스 드라이버 개발 방법 더 읽기"

윈도우 디바이스 드라이버 개발환경 구축

윈도우 디바이스 드라이버 개발환경 구축 디바이스 드라이버가 처음이신 분들이라면 , 아직 개념 및 용어 이해에 어려움이 있었을 것으로 본다 . 그것은 아마도 실제 개발을 해보지 않은 상태에서 이론적인 내용만 가지고 이해하려다 보니 어려웠을 것으로 보인다 . 그래서 , 이번 컬럼에서는 디바이스 드라이버를 실습해 볼 수 있는 개발 환경 구축에 대한 내용을 다뤄 보도록 하겠다 .

윈도우 디바이스 드라이버 개발환경 구축 더 읽기"

tomcat+mysql 설치

1. JDK를 설치한다. 2. PATH에 C:\Program Files\Java\jdk1.6.0_12\bin 을 추가한다. 3. CLASSPATH=C:\Program Files\Java\jdk1.6.0_12\lib\tools.jar 환경변수 추가 4. tomcat 설치 5. mysql 설치 6. mysql-connector-java-x.x.x-bin.jar 다운로드 7. mysql-connector-java-5.0.7-bin.jar -> c:\Program Files\Apache Software Foundation\Tomcat 5.5\common\lib\ 에 복사 8. Tomcat 5.5/conf/server.xml에서 <Service name=”Catalina”>~</Service>밑에 아래와 같이 호스트별로 추가시켜 준다.       <!– localhost 호스트 추가 (기본적으로 있음) –>     

tomcat+mysql 설치 더 읽기"

MySQL 동시 접속수 500 이상으로 늘리기

MySQL 은 기본적으로 동시 접속수가 500 connection 이하에 최적화가 되어 있다.  MySQL 홈의문서 중 http://www.mysql.com/doc/L/i/Linux.html 문서에 의하면, 500 connection 이상을 설정 할 경우 glibc 의 linuxthreads 에 패치를 하지 않았을 경우 상당히 불안하다고 보고 되고있다. 이 문서에서는 이 문제에 관한 부분을 언급하게 된다. 동시 접속수 500 이상을 위해서는 일단glibc 를 리빌드해야 하며, 재컴파일된 libpthread.a 를

MySQL 동시 접속수 500 이상으로 늘리기 더 읽기"

자바스크립트의 모든것

HTML에 JavaScript 삽입<script language=”javascript”>JavaScript Statements</script> HTML에 JavaScript 코드 파일 삽입<script language=”javascipt” src=”src.js”></script> 변수의 대소문자 구분 변수에 포함된 데이터의 형을 지정하지 않고, JavaScript 인터프리터가 변수에 포함된 데이터 형을 추적하고 변환. JavaScript 데이터 형 숫 자 형 : 정수와 부동 소수 BOOLEAN : true, false STRING : 작은 따옴표나 큰 따옴표에 들어가 있는 값으로, 특수문자 포맷 사용시에는

자바스크립트의 모든것 더 읽기"

위로 스크롤