Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

168 lines
2.3 KiB

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "windows.h"
#define FAILURE printf("FAIL: %d\n",__LINE__);exit(1)
int __cdecl main(int argc,char *argv[]) {
HANDLE hFile;
char *myPort = "COM1";
COMMCONFIG myConf,spareConf;
DWORD sizeOfConf;
DCB myDcb,spareDcb;
if (argc > 1) {
myPort = argv[1];
}
if ((hFile = CreateFile(
myPort,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
)) == ((HANDLE)-1)) {
FAILURE;
}
if (!GetCommConfig(
hFile,
NULL,
&sizeOfConf
)) {
FAILURE;
}
if (!sizeOfConf) {
FAILURE;
}
if (sizeOfConf != sizeof(COMMCONFIG)) {
FAILURE;
}
if (!GetCommState(
hFile,
&myDcb
)) {
FAILURE;
}
RtlZeroMemory(
&myConf,
sizeOfConf
);
myConf.dwSize = sizeOfConf;
if (!GetCommConfig(
hFile,
&myConf,
&sizeOfConf
)) {
FAILURE;
}
if (memcmp(&myConf.dcb,&myDcb,sizeof(DCB))) {
FAILURE;
}
if (myConf.dwSize != sizeof(COMMCONFIG)) {
FAILURE;
}
if (myConf.wVersion != 0) {
FAILURE;
}
if (myConf.pProviderSubType != 0) {
FAILURE;
}
if (myConf.dwProviderOffset != 0) {
FAILURE;
}
if (myConf.dwProviderSize != 0) {
FAILURE;
}
if (myConf.wcProviderData[1]) {
FAILURE;
}
//
// Make sure the commconfig has not changed after a call to set
// and that the comm state is also the same.
//
spareConf = myConf;
spareDcb = myDcb;
if (!SetCommConfig(
hFile,
(PVOID)&myConf,
sizeOfConf
)) {
FAILURE;
}
if (memcmp(&spareConf,&myConf,sizeof(COMMCONFIG))) {
FAILURE;
}
if (!GetCommState(
hFile,
&myDcb
)) {
FAILURE;
}
if (memcmp(&spareDcb,&myDcb,sizeof(DCB))) {
FAILURE;
}
return 1;
}