반응형
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
- vcruntime140.dll
- C언어 패킷캡쳐
- ucrtbase.dll
- 해킹
- 포너블
- 시스템해킹
- Windows Kernel
- Windows Kernel Debug
- 윈도우 커널 드라이버
- 윈도우 커널 디버깅
- pwnable
- Msvcrt.dll
- apphelp.dll
- hacking
- 윈도우 커널
- arudino
- 개발하기
- windows kernel debugging
- vcruntime.dll
- pcap packet
- pcap packet capture
- Windows
- 개발 환경 준비
- packet capture
- 바이트 오더
- IAT Hooking
- Windows Kernel Driver
- HackCTF
- 네트워크 바이트 오더
Archives
- Today
- Total
미친해커
[C] Serial Monitor Step 4.5 - CommTimeouts 본문
반응형
사실 이 내용을 올려야 하나 말아야 하나 고민을 했지만 결국 번외로 올리기로 결정했다. 아마 지금까지 올린 코드만보고 컴파일 했을 때 정상적으로 출력되는 사람이 있는 한편 그렇지 않은 사람도 있을 것이다. 나는 이 블로그를 쓰기 전 처음에 미리 시도해봤을 때는 출력이 이상하게 되었다, 그래서 CommTimeouts이라는 것을 설정해줘야 한다는 글을 발견하였고 실제로 이것을 설정하니 오류가 해결되었다. 하지만 블로그를 쓰면서 다시 한번 테스트하니 해당 오류가 발생하지 않았다. 그래서 이건 간단하게 남기려고한다.
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
HANDLE hComm = CreateFileA("\\\\.\\COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hComm == INVALID_HANDLE_VALUE)
{
printf("CreateFileA Failed\n");
printf("GetLastError : %d\n", GetLastError());
return -1;
}
DCB state = { 0, };
GetCommState(hComm, &state);
state.BaudRate = 115200;
SetCommState(hComm, &state);
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 -1;
}
while (TRUE)
{
char buffer[32] = { 0, };
printf("PC : ");
scanf("%s", buffer);
if (WriteFile(hComm, buffer, strlen(buffer), NULL, NULL) == FALSE)
continue;
DWORD NumberOfBytesRead;
while (TRUE)
{
ReadFile(hComm, buffer, 32, &NumberOfBytesRead, NULL);
if (NumberOfBytesRead != 0)
{
printf("%s", buffer);
break;
}
}
}
CloseHandle(hComm);
}
위 구조체를 사용해 Timeouts을 설정한건데 아직 각 멤버변수 별 어떠한 기능을 하는지는 잘 모르겠다. 하지만 대체로 위 코드와 같은 값을 설정해서 사용한다는 것을 발견하게 되었다. 자세한건 위 MSDN에서 확인하기 바란다.
반응형
'C > Serial Monitor' 카테고리의 다른 글
[C] Serial Monitor Step 6 - Baud Rate 설정하기 (0) | 2021.12.28 |
---|---|
[C] Serial Monitor Step 5 - 시리얼 번호로 핸들 가져오기 (0) | 2021.12.28 |
[C] Serial Monitor Step 4 - 데이터 쓰기 (0) | 2021.12.27 |
[C] Serial Monitor Step 3 - 데이터 읽기 (0) | 2021.12.27 |
[C] Serial Monitor Step 2 - Baud Rate 설정 (0) | 2021.12.26 |
Comments