본문 바로가기

Programming

(224)
[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 = ..
[C언어] 주소록 linked list + file I/O #include #include #include #define MAX_NAME 50#define TRUE 1 typedef struct node *NodePointer;typedef struct node {int age;char name[MAX_NAME];NodePointer link;} Node; int count = 0; void read_Node(NodePointer* );void save_Node(NodePointer); void Make_Node(NodePointer *,int ,char * );void Print_Node(NodePointer );void Fine_Node(NodePointer );void delete_Node(NodePointer* ); int main( void ){ int..
[C언어] 간단한 주소록 만들기를 링크드리스트로 구현 #include #include #include #define MAX_NAME 50#define TRUE 1 typedef struct node *NodePointer;typedef struct node {int age;char name[MAX_NAME];NodePointer link;} Node; void Make_Node(NodePointer );void Print_Node(NodePointer );void Fine_Node(NodePointer );void delete_Node(NodePointer); int main( void ){int i,j;int nember; NodePointer head = NULL;NodePointer temp = head; while(TRUE){printf("1) 입력..
[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란 윈도우 프로그래밍은 일반 콘솔 프로그램과 다르게 메세지 구동 방식이다. 즉 콘솔 프로그램이 함수들이 순차적으로 진행이 된다면, 윈도우 프로그램은 사용자가 특정한 작업을 하게되면 그에 해당하는 윈도우 메세지가 발생하고 그러한 메세지를 현재 활성화 되어있는 프로그램의 메세지 큐에 집어 넣게된다. 그러면 크로그램은 메시지 큐에서 메세지를 가져와서 그에 해당하는 작업을 한다. 이처럼 드라이버 역시 이와 비슷하게 작동을 하는데 드라이버는 로딩이 성공적으로 이루어지면 할당된 메모리에 대기하고 있다가 자신이 컨트롤하고 있는 디바이스에 특정한 요청이 왔을 때 윈도우에서 보내주는 특정 요청 정보를 토대로 적절한 동작을 처리한다. 이 때 윈도우 프로그램이 특정 메세지를 처리하기 위해 해당 메세지 값과 그에 관련된 정보들이..