본문 바로가기

Programming/Windows&C#

(64)
[Windows/WinAPI] 레지스트리 Key 생성하기(실습4) #include #include #include #include int _tmain(INT argv , LPTSTR argc[]){LONG result = 0;LONG result2 = 0;TCHAR data1[20];TCHAR data2[50];DWORD data3 ; HKEY obtainKey = NULL; _tsetlocale(LC_ALL, _T("Korean"));_tprintf(_T("2010105094 정민우\n"));if(argv != 4){_tprintf(_T("error\n"));return 1;}_tcscpy(data1 ,argc[2]);_tcscpy(data2 ,argc[1]);data3 = (DWORD)_ttoi(argc[3]);if(_tcscmp(data2, _T("HKEY_CUR..
[Windows/WinAPI] Polymorphic 자료형 Polymorphic 자료형은 MS에서 64bit 기반으로 넘어가면서 새롭게 정의한 자료형이다. 형태는 아래와 같다. #if defined(_WIN64)typedef _int64 LONG_PTR;typedef unsigned _int64 ULONG_PTR; typedef _int64 INT_PTR;typedef unsigned _int64 UNIT_PTR; #elsetypedef long LONG_PTR;typedef unsigned long ULONG_PTR; typedef int INT_PTR;typedef unsigned int UNIT_PTR; #endif 이러한 형태로 되어있기 때문에 OS가 64bit이든 32bit이든 상관없이 잘 돌아간다. 다시 말하면 자료형이 맞춰서 변한다고 보면 된다.
[Windows/WinAPI] FindFirstFile , FileTimeToSustemTime, FindNextFile (실습3) #include #include #include #include int _tmain(INT argc , LPCSTR argv[]){HANDLE han;WIN32_FIND_DATA TT1;SYSTEMTIME A1; _tsetlocale(LC_ALL , _T("Korean"));han = FindFirstFile(_T("D:\\test0926\\*.*"), &TT1);if(han == false){_tprintf(_T("FindFirstFile error!!\n"));return 0;}if(!FileTimeToSystemTime(&TT1.ftCreationTime , &A1)){_tprintf(_T("FileTimeToSystemTime error!!\n"));return 1;} while(FindNextF..
[Windows/WInAPI] 윈도우 시스탬 프로그래밍 실습 02 // 파일 두개를 합쳐서 하나의 파일에 복사 #include #include #include #include int _tmain (int argc, LPCTSTR argv[]) { HANDLE hIn1, hIn2 , hOut; DWORD nIn1, nIn2, nOut; TCHAR buffer[256]; _tsetlocale(LC_ALL , _T("korean")); if(argc != 4) { _tprintf(_T("error1")); return 1; } hIn1 = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hIn1 == INVALID_HANDLE_VALUE..
[Windows/WinAPI] 윈도우 시스탬 프로그래밍 실습 01 //첫 수업 간단한 파일 복사 예제. #include #include #define BUF_SIZE 256 int main(int argc, char *argv[]){FILE *inFile, *outFile ; char rec[BUF_SIZE];size_t byteIn, byteOut; if(argc != 3){fprintf(stderr, "Usage : copyC file1 file2\n");return 1;} inFile = fopen(argv[1],"rb");outFile = fopen(argv[2],"wb");if(inFile == NULL){perror(argv[1]);return 1;}if(outFile==NULL){perror(argv[2]);return 1;} while((byteIn = ..
[Windows/WDM] 드라이버 스택 코드 이해 ※제가 공부하면서 정리용으로 쓰는것이기 때문이 틀릴 가능성이 다분히 있습니다. 혹시 잘못된점이 있다면 댓글로 알려주세요 (아마 잘못된 부분이 많을 것으로 예상 됩니다.) 드라이버 스택을 이애하기 위해선 PDO, FDO, FIDO가 무엇인지 필수적으로 알아야한다. PDO(Physical Device Object)특정 디바이스에 attach된 디바이스들에 대한 열거 및 관리를 하는 Driver가 사용하는 device object 라고 말 할수 있다. 즉 만드는 디바이스에 대한 설명하는 드라이버이다.[출처] Device Stack(디바이스 스택)에 대한 간략한 정리|작성자 린트이 PDO는 디바이스 드라이버 개발자가 직접 만드는것이 아닌 드라이버 개발자가 만들 디바이스의 상위 디바이가 개발자가 만드는 디바이스에..
[Windows/WDM] 드라이버 WDM(Windows Driver Model)예전의 windows, 95와 NT에선 드라이버 개발 방법이 완전히 달랐다. 그래서 차기작인 98과 2000에선 이러한 부분을 해결 할려고 했었고 그러기 위해서 NT의 기존 커널 드라이버에 '플러스앤플레이' 그능과 '전원 관리 기능'을추가하여 새롭게 만든 규격이 WDM이다. MMU(Memory Management Unit)물리 메모리와 가상 메모리의 변환 테이블이다. 즉 컴퓨터의 실제 메모리 주소를 물리 메모리 영역이라고 한다면 우리가 사용하는 메모리 주소를 가상 메모리 주소라고 할 수 있다.MMU 주소 변환 테이블· 가상 주소와 실제 주소가 대응하는 표를 가지고 있음.· 지정된 주소가 표에 지정된 범위인지 조사한다.· 범위 외라면 부정 접근 예외를 발생 시킨..
[Windows/WDM] IRP란 윈도우 프로그래밍은 일반 콘솔 프로그램과 다르게 메세지 구동 방식이다. 즉 콘솔 프로그램이 함수들이 순차적으로 진행이 된다면, 윈도우 프로그램은 사용자가 특정한 작업을 하게되면 그에 해당하는 윈도우 메세지가 발생하고 그러한 메세지를 현재 활성화 되어있는 프로그램의 메세지 큐에 집어 넣게된다. 그러면 크로그램은 메시지 큐에서 메세지를 가져와서 그에 해당하는 작업을 한다. 이처럼 드라이버 역시 이와 비슷하게 작동을 하는데 드라이버는 로딩이 성공적으로 이루어지면 할당된 메모리에 대기하고 있다가 자신이 컨트롤하고 있는 디바이스에 특정한 요청이 왔을 때 윈도우에서 보내주는 특정 요청 정보를 토대로 적절한 동작을 처리한다. 이 때 윈도우 프로그램이 특정 메세지를 처리하기 위해 해당 메세지 값과 그에 관련된 정보들이..