This line
DWORD dwSize = sizeof(data);
sets dwSize
to the size of the string including the null-character at the end, which I don't think you want to send. And the command must end with the \r
character. Try:
char data[] = "AT^SYSCFG=13,1,3FFFFFFF,2,4\r";
DWORD dwSize = strlen(data); // use strlen instead of sizeof
(See hlovdal's comment below for reference. Also http://en.wikipedia.org/wiki/Hayes_command_set#The_basic_Hayes_command_set.)