반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 윈도우 커널 디버깅
- Network Byte Order
- ucrtbase.dll
- Windows Kernel
- Windows
- windows kernel debugging
- 네트워크 바이트 오더
- packet capture
- HackCTF
- 윈도우 커널 드라이버
- C언어 패킷캡쳐
- 해킹
- Msvcrt.dll
- arudino
- 개발하기
- vcruntime.dll
- hacking
- pwnable
- 포너블
- 시스템해킹
- 개발 환경 준비
- apphelp.dll
- IAT Hooking
- vcruntime140.dll
- pcap packet
- Windows Kernel Driver
- Windows Kernel Debug
- 바이트 오더
- pcap packet capture
- 윈도우 커널
Archives
- Today
- Total
미친해커
[C] Serial Monitor Step 5 - 시리얼 번호로 핸들 가져오기 본문
반응형
기본적인 시리얼 포트와의 통신 방법은 다 알아봤다. 이제 배운 지식을 활용해 간단한 모듈을 만들어보는 것이다. 우선 첫번째로 시리얼 통신을 위해서는 시리얼 포트의 핸들이 필요하고 핸들을 얻기 위해서는 통신하고 싶은 시리얼 포트의 번호를 알아야한다. 즉 이번에는 시리얼 번호를 이용해 해당 시리얼 포트의 핸들을 반환해주는 함수를 만들어본다. 사용되는 Windows API와 구조체는 다음과 같다.
위 함수와 구조체에 대해 잘 모른다면 문서를 읽거나 이전 포스팅을 읽는것을 추천한다.
HANDLE GetCommHandleByComNumber(DWORD ComNumber)
{
WCHAR CommName[16];
swprintf(CommName, 16, L"\\\\.\\COM%d", ComNumber);
HANDLE hComm = CreateFileW(CommName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hComm == INVALID_HANDLE_VALUE)
{
printf("CreateFileW Failed\n");
printf("GetLastError : %d\n", GetLastError());
return INVALID_HANDLE_VALUE;
}
DCB state;
if (GetCommState(hComm, &state) == FALSE)
{
printf("GetCommState Failed\n");
printf("GetLastError : %d\n", GetLastError());
CloseHandle(hComm);
return INVALID_HANDLE_VALUE;
}
state.DCBlength = sizeof(DCB);
state.BaudRate = CBR_115200;
state.ByteSize = 8;
state.Parity = NOPARITY;
state.StopBits = ONESTOPBIT;
if (SetCommState(hComm, &state) == FALSE)
{
printf("SetCommState Failed\n");
printf("GetLastError : %d\n", GetLastError());
CloseHandle(hComm);
return INVALID_HANDLE_VALUE;
}
COMMTIMEOUTS timeout = { 0 };
timeout.ReadIntervalTimeout = 50;
timeout.ReadTotalTimeoutConstant = 50;
timeout.ReadTotalTimeoutMultiplier = 10;
timeout.WriteTotalTimeoutConstant = 50;
timeout.WriteTotalTimeoutMultiplier = 10;
if (SetCommTimeouts(hComm, &timeout) == FALSE)
{
printf("SetCommTimeouts Failed\n");
printf("GetLastError : %d\n", GetLastError());
CloseHandle(hComm);
return INVALID_HANDLE_VALUE;
}
return hComm;
}
위와 같이 ComNumber만 인자로 넘겨주게된다면 해당 시리얼 포트의 핸들을 반환해주는 함수를 정의하였다. 그 외에 해당 핸들의 대한 설정들도 자동으로 해주기때문에 생각보다 많은 작업을 줄일 수 있게되었다.
반응형
'C > Serial Monitor' 카테고리의 다른 글
[C] Serial Monitor Step 7 - 데이터 전송, 수신 함수 만들기 (0) | 2021.12.31 |
---|---|
[C] Serial Monitor Step 6 - Baud Rate 설정하기 (0) | 2021.12.28 |
[C] Serial Monitor Step 4.5 - CommTimeouts (0) | 2021.12.27 |
[C] Serial Monitor Step 4 - 데이터 쓰기 (0) | 2021.12.27 |
[C] Serial Monitor Step 3 - 데이터 읽기 (0) | 2021.12.27 |
Comments