Sorry, for delay. That's the code, the Data and Length variables are definately set correctly. I've also tried using PTRCONTENTS, but no different. I've now resorted to passing a second request which is an array of "unsigned char" indices (+1 to allow first byte to be NULL) for NULL bytes, and then setting them to 0x01. This works, but limits this request to being 255 bytes long (since making the array into shorts or above would in itself create NULL bytes).
curl_formadd(&lPOST, &lPOSTLast, CURLFORM_COPYNAME, "Request", CURLFORM_COPYCONTENTS, lCurrentRequest->Data,
CURLFORM_CONTENTSLENGTH, lCurrentRequest->Length, CURLFORM_END);