本文整理汇总了C++中CreateFileA函数的典型用法代码示例。如果您正苦于以下问题:C++ CreateFileA函数的具体用法?C++ CreateFileA怎么用?C++ CreateFileA使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CreateFileA函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: open
int File::read()
{
if (len)
return 0; // already read the file
#if POSIX
size_t size;
ssize_t numread;
int fd;
struct stat buf;
int result = 0;
char *name;
name = this->name->toChars();
//printf("File::read('%s')\n",name);
fd = open(name, O_RDONLY);
if (fd == -1)
{
//printf("\topen error, errno = %d\n",errno);
goto err1;
}
if (!ref)
::free(buffer);
ref = 0; // we own the buffer now
//printf("\tfile opened\n");
if (fstat(fd, &buf))
{
printf("\tfstat error, errno = %d\n",errno);
goto err2;
}
size = (size_t)buf.st_size;
buffer = (unsigned char *) ::malloc(size + 2);
if (!buffer)
{
printf("\tmalloc error, errno = %d\n",errno);
goto err2;
}
numread = ::read(fd, buffer, size);
if (numread != size)
{
printf("\tread error, errno = %d\n",errno);
goto err2;
}
if (touchtime)
memcpy(touchtime, &buf, sizeof(buf));
if (close(fd) == -1)
{
printf("\tclose error, errno = %d\n",errno);
goto err;
}
len = size;
// Always store a wchar ^Z past end of buffer so scanner has a sentinel
buffer[size] = 0; // ^Z is obsolete, use 0
buffer[size + 1] = 0;
return 0;
err2:
close(fd);
err:
::free(buffer);
buffer = NULL;
len = 0;
err1:
result = 1;
return result;
#elif _WIN32
DWORD size;
DWORD numread;
HANDLE h;
int result = 0;
char *name;
name = this->name->toChars();
h = CreateFileA(name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if (h == INVALID_HANDLE_VALUE)
goto err1;
if (!ref)
::free(buffer);
ref = 0;
size = GetFileSize(h,NULL);
buffer = (unsigned char *) ::malloc(size + 2);
if (!buffer)
goto err2;
if (ReadFile(h,buffer,size,&numread,NULL) != TRUE)
goto err2;
if (numread != size)
goto err2;
//.........这里部分代码省略.........
示例2: clear
void
TeDecoderFile::init()
{
clear();
// First open the file
m_hFile = CreateFileA(
params_.fileName_.c_str(), // File name
GENERIC_READ | GENERIC_WRITE, // Read-write
FILE_SHARE_READ
| FILE_SHARE_WRITE, // Allow sharing-- we're only doing a quick scan
NULL, // No security attributes
OPEN_EXISTING, // Only open an existing file
0, // Ignore file attributes
NULL); // Ignore hTemplateFile
if (m_hFile == INVALID_HANDLE_VALUE)
return ; // could not open file
// Get the file's size
m_dwSize = GetFileSize(m_hFile, NULL);
if (m_dwSize == 0xffffffff)
{
m_hFile = NULL;
return ;
}
// Allocate buffer to get raster line from file
long mBufferSize = params_.ncols_;
if (params_.interleaving_ == TeRasterParams::TePerPixel)
mBufferSize *= params_.nBands();
switch (params_.dataType_[0]) {
case (TeUNSIGNEDCHAR):
m_buffer = new unsigned char[mBufferSize];
break;
case (TeCHAR) :
m_buffer = new char[mBufferSize];
break;
case (TeUNSIGNEDSHORT):
m_buffer = new unsigned short[mBufferSize];
break;
case (TeSHORT):
m_buffer = new short[mBufferSize];
break;
case (TeUNSIGNEDLONG):
m_buffer = new unsigned long[mBufferSize];
break;
case (TeLONG):
m_buffer = new long[mBufferSize];
break;
case (TeFLOAT):
m_buffer = new float[mBufferSize];
break;
case (TeDOUBLE):
m_buffer = new double[mBufferSize];
break;
default:
break;
}
if ( m_buffer == NULL )
return ;
else
return ;
}
示例3: SetFile
BOOL SetFile(PCHAR pszPath)
{
BOOL bGood = TRUE;
HANDLE hOld = INVALID_HANDLE_VALUE;
HANDLE hNew = INVALID_HANDLE_VALUE;
PDETOUR_BINARY pBinary = NULL;
CHAR szOrg[MAX_PATH];
CHAR szNew[MAX_PATH];
CHAR szOld[MAX_PATH];
szOld[0] = '\0';
szNew[0] = '\0';
StringCchCopyA(szOrg, sizeof(szOrg), pszPath);
StringCchCopyA(szNew, sizeof(szNew), szOrg);
StringCchCatA(szNew, sizeof(szNew), "#");
StringCchCopyA(szOld, sizeof(szOld), szOrg);
StringCchCatA(szOld, sizeof(szOld), "~");
printf(" %s:\n", pszPath);
hOld = CreateFileA(szOrg,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hOld == INVALID_HANDLE_VALUE) {
printf("Couldn't open input file: %s, error: %d\n",
szOrg, GetLastError());
bGood = FALSE;
goto end;
}
hNew = CreateFileA(szNew,
GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (hNew == INVALID_HANDLE_VALUE) {
printf("Couldn't open output file: %s, error: %d\n",
szNew, GetLastError());
bGood = FALSE;
goto end;
}
if ((pBinary = DetourBinaryOpen(hOld)) == NULL) {
printf("DetourBinaryOpen failed: %d\n", GetLastError());
goto end;
}
if (hOld != INVALID_HANDLE_VALUE) {
CloseHandle(hOld);
hOld = INVALID_HANDLE_VALUE;
}
{
BOOL bAddedDll = FALSE;
DetourBinaryResetImports(pBinary);
if (!s_fRemove) {
if (!DetourBinaryEditImports(pBinary,
&bAddedDll,
AddBywayCallback, NULL, NULL, NULL)) {
printf("DetourBinaryEditImports failed: %d\n", GetLastError());
}
}
if (!DetourBinaryEditImports(pBinary, NULL,
ListBywayCallback, ListFileCallback,
NULL, NULL)) {
printf("DetourBinaryEditImports failed: %d\n", GetLastError());
}
if (!DetourBinaryWrite(pBinary, hNew)) {
printf("DetourBinaryWrite failed: %d\n", GetLastError());
bGood = FALSE;
}
DetourBinaryClose(pBinary);
pBinary = NULL;
if (hNew != INVALID_HANDLE_VALUE) {
CloseHandle(hNew);
hNew = INVALID_HANDLE_VALUE;
}
if (bGood) {
if (!DeleteFileA(szOld)) {
DWORD dwError = GetLastError();
if (dwError != ERROR_FILE_NOT_FOUND) {
printf("Warning: Couldn't delete %s: %d\n", szOld, dwError);
bGood = FALSE;
}
}
if (!MoveFileA(szOrg, szOld)) {
printf("Error: Couldn't back up %s to %s: %d\n",
szOrg, szOld, GetLastError());
//.........这里部分代码省略.........
示例4: return
template <typename PointT> int
pcl::PCDWriter::writeBinaryCompressed (const std::string &file_name,
const pcl::PointCloud<PointT> &cloud)
{
if (cloud.points.empty ())
{
throw pcl::IOException ("[pcl::PCDWriter::writeBinaryCompressed] Input point cloud has no data!");
return (-1);
}
int data_idx = 0;
std::ostringstream oss;
oss << generateHeader<PointT> (cloud) << "DATA binary_compressed\n";
oss.flush ();
data_idx = static_cast<int> (oss.tellp ());
#if _WIN32
HANDLE h_native_file = CreateFileA (file_name.c_str (), GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (h_native_file == INVALID_HANDLE_VALUE)
{
throw pcl::IOException ("[pcl::PCDWriter::writeBinaryCompressed] Error during CreateFile!");
return (-1);
}
#else
int fd = pcl_open (file_name.c_str (), O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (fd < 0)
{
throw pcl::IOException ("[pcl::PCDWriter::writeBinaryCompressed] Error during open!");
return (-1);
}
#endif
// Mandatory lock file
boost::interprocess::file_lock file_lock;
setLockingPermissions (file_name, file_lock);
std::vector<pcl::PCLPointField> fields;
size_t fsize = 0;
size_t data_size = 0;
size_t nri = 0;
pcl::getFields (cloud, fields);
std::vector<int> fields_sizes (fields.size ());
// Compute the total size of the fields
for (size_t i = 0; i < fields.size (); ++i)
{
if (fields[i].name == "_")
continue;
fields_sizes[nri] = fields[i].count * pcl::getFieldSize (fields[i].datatype);
fsize += fields_sizes[nri];
fields[nri] = fields[i];
++nri;
}
fields_sizes.resize (nri);
fields.resize (nri);
// Compute the size of data
data_size = cloud.points.size () * fsize;
//////////////////////////////////////////////////////////////////////
// Empty array holding only the valid data
// data_size = nr_points * point_size
// = nr_points * (sizeof_field_1 + sizeof_field_2 + ... sizeof_field_n)
// = sizeof_field_1 * nr_points + sizeof_field_2 * nr_points + ... sizeof_field_n * nr_points
char *only_valid_data = static_cast<char*> (malloc (data_size));
// Convert the XYZRGBXYZRGB structure to XXYYZZRGBRGB to aid compression. For
// this, we need a vector of fields.size () (4 in this case), which points to
// each individual plane:
// pters[0] = &only_valid_data[offset_of_plane_x];
// pters[1] = &only_valid_data[offset_of_plane_y];
// pters[2] = &only_valid_data[offset_of_plane_z];
// pters[3] = &only_valid_data[offset_of_plane_RGB];
//
std::vector<char*> pters (fields.size ());
int toff = 0;
for (size_t i = 0; i < pters.size (); ++i)
{
pters[i] = &only_valid_data[toff];
toff += fields_sizes[i] * static_cast<int> (cloud.points.size ());
}
// Go over all the points, and copy the data in the appropriate places
for (size_t i = 0; i < cloud.points.size (); ++i)
{
for (size_t j = 0; j < fields.size (); ++j)
{
memcpy (pters[j], reinterpret_cast<const char*> (&cloud.points[i]) + fields[j].offset, fields_sizes[j]);
// Increment the pointer
pters[j] += fields_sizes[j];
}
}
char* temp_buf = static_cast<char*> (malloc (static_cast<size_t> (static_cast<float> (data_size) * 1.5f + 8.0f)));
// Compress the valid data
unsigned int compressed_size = pcl::lzfCompress (only_valid_data,
static_cast<uint32_t> (data_size),
&temp_buf[8],
static_cast<uint32_t> (static_cast<float>(data_size) * 1.5f));
unsigned int compressed_final_size = 0;
// Was the compression successful?
//.........这里部分代码省略.........
示例5: main
int main (int argc, char *argv[])
{
if (argc != 5) {
fputs("Usage: lab1 [enc|dec] <input file> <output file> <key>", stderr);
return -1;
}
enum mode mod;
if (strncmp(argv[1], "enc", 3) == 0) {
mod = ENC;
} else if (strncmp(argv[1], "dec", 3) == 0) {
mod = DEC;
} else {
fprintf(stderr, "Wrong encryption mode: \"%s\".", argv[1]);
return -1;
}
HANDLE inf = 0;
HANDLE inmmf = 0;
PBYTE indata = NULL;
HANDLE outf = 0;
HANDLE outmmf = 0;
PBYTE outdata = NULL;
LARGE_INTEGER insz = {.QuadPart = 0};
LARGE_INTEGER outsz = {.QuadPart = 0};
unsigned char err = 1;
inf = CreateFileA(argv[2], GENERIC_READ, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
//printf("%0.16lx || %lu %s\n", inf, GetLastError(), argv[2]);
inmmf = CreateFileMappingA(inf, NULL, PAGE_READONLY, 0, 0, NULL);
if (inmmf == NULL) {
fprintf(stderr, "Can't open memory mapped file. Error code: %lu\n",
GetLastError());
goto err;
}
indata = (PBYTE)MapViewOfFile(inmmf, FILE_MAP_READ, 0, 0, 0);
if (indata == NULL) {
fprintf(stderr, "Can't map view of file. Error code: %lu\n", GetLastError());
goto err;
}
GetFileSizeEx(inf, &insz);
outsz.QuadPart = (insz.QuadPart / 8 + 2) * 8;
outf = CreateFileA(argv[3], GENERIC_READ | GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
outmmf = CreateFileMappingA(outf, NULL, PAGE_READWRITE,
outsz.HighPart, outsz.LowPart, NULL);
if (outmmf == NULL) {
fprintf(stderr, "Can't open memory mapped file. Error code: %lu\n",
GetLastError());
goto err;
}
outdata = (PBYTE)MapViewOfFile(outmmf, FILE_MAP_WRITE, 0, 0, 0);
if (outdata == NULL) {
fprintf(stderr, "Can't map view of file. Error code: %lu\n", GetLastError());
goto err;
}
// Crypto stuff
BOOL res;
HCRYPTPROV prov;
if (!CryptAcquireContext(&prov, 0, MS_ENHANCED_PROV, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT)) {
fputs("Cannot acquire crypt context.", stderr);
goto err;
}
HCRYPTKEY key = generateKey(prov, CALG_3DES, argv[4]);
crash_if(key == 0, "Cannot make a key.");
for (LARGE_INTEGER i = {.QuadPart = 0}; i.QuadPart < insz.QuadPart;
(i.QuadPart) += buf_size) {
unsigned char buf[buf_size + block_size];
DWORD len = buf_size;
void *inp = indata + i.QuadPart,
*outp = outdata + i.QuadPart;
BOOL final = insz.QuadPart - i.QuadPart <= buf_size;
if (final) {
len = insz.QuadPart - i.QuadPart;
}
memcpy(buf, inp, len);
if (mod == ENC) {
res = CryptEncrypt(key, 0, final, 0, buf, &len, buf_size + block_size);
} else {
res = CryptDecrypt(key, 0, final, 0, buf, &len);
}
if (res) {
memcpy(outp, buf, len);
if (final) {
outsz.QuadPart = i.QuadPart + len;
}
//.........这里部分代码省略.........
示例6: SioOpen
/*-----------------------------------------------------------------------------
* Schnittstelle öffnen
*/
int SioOpen(const char *pPortName,
TSioBaud baud,
TSioDataBits dataBits,
TSioParity parity,
TSioStopBits stopBits,
TSioMode mode
) {
HANDLE hCom;
DCB dcb;
bool fSuccess;
COMMTIMEOUTS timeouts;
int i;
// freien descriptor suchen
for (i = 0; (i < MAX_NUM_SIO) && (sSio[i].used == true); i++);
if (i == MAX_NUM_SIO) {
// kein Platz
printf("no handle for %s\r\n", pPortName);
return -1;
}
hCom = CreateFileA(pPortName, GENERIC_WRITE | GENERIC_READ,
0, NULL, OPEN_EXISTING, 0, NULL );
if (hCom == INVALID_HANDLE_VALUE) {
return -1;
}
sSio[i].used = true;
sSio[i].hCom = hCom;
sSio[i].unRead.bufIdxWr = 0;
sSio[i].unRead.bufIdxRd = 0;
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess) {
printf("GetCommState failed\r\n");
return -1;
}
switch (baud) {
case eSioBaud9600:
dcb.BaudRate = 9600;
break;
default:
dcb.BaudRate = 9600;
break;
}
switch (dataBits) {
case eSioDataBits8:
dcb.ByteSize = DATABITS_8;
break;
default:
dcb.ByteSize = DATABITS_8;
break;
}
switch (parity) {
case eSioParityNo:
dcb.Parity = NOPARITY;
break;
case eSioParityEven:
dcb.Parity = EVENPARITY;
break;
default:
dcb.Parity = NOPARITY;
break;
}
switch (stopBits) {
case eSioStopBits1:
dcb.StopBits = ONESTOPBIT;
break;
default:
dcb.StopBits = ONESTOPBIT;
break;
}
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess) {
printf("SetCommState failed\r\n");
return -1;
}
fSuccess = GetCommTimeouts(hCom, &timeouts);
/* Set timeout to 0 to force that:
If a character is in the buffer, the character is read,
If no character is in the buffer, the function do not wait and returns immediatly
*/
timeouts.ReadIntervalTimeout = MAXDWORD;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
//.........这里部分代码省略.........
示例7: RS232_OpenComport
int RS232_OpenComport(int comport_number, int baudrate)
{
if((comport_number>15)||(comport_number<0))
{
printf("illegal comport number\n");
return(1);
}
switch(baudrate)
{
case 110 : strcpy(baudr, "baud=110 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 300 : strcpy(baudr, "baud=300 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 600 : strcpy(baudr, "baud=600 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 1200 : strcpy(baudr, "baud=1200 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 2400 : strcpy(baudr, "baud=2400 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 4800 : strcpy(baudr, "baud=4800 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 9600 : strcpy(baudr, "baud=9600 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 19200 : strcpy(baudr, "baud=19200 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 38400 : strcpy(baudr, "baud=38400 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 57600 : strcpy(baudr, "baud=57600 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 115200 : strcpy(baudr, "baud=115200 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 128000 : strcpy(baudr, "baud=128000 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 256000 : strcpy(baudr, "baud=256000 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 500000 : strcpy(baudr, "baud=500000 data=8 parity=N stop=1 dtr=on rts=on");
break;
case 1000000 : strcpy(baudr, "baud=1000000 data=8 parity=N stop=1 dtr=on rts=on");
break;
default : printf("invalid baudrate\n");
return(1);
break;
}
Cport[comport_number] = CreateFileA(comports[comport_number],
GENERIC_READ|GENERIC_WRITE,
0, /* no share */
NULL, /* no security */
OPEN_EXISTING,
0, /* no threads */
NULL); /* no templates */
if(Cport[comport_number]==INVALID_HANDLE_VALUE)
{
printf("unable to open comport\n");
return(1);
}
DCB port_settings;
memset(&port_settings, 0, sizeof(port_settings)); /* clear the new struct */
port_settings.DCBlength = sizeof(port_settings);
if(!BuildCommDCBA(baudr, &port_settings))
{
printf("unable to set comport dcb settings\n");
CloseHandle(Cport[comport_number]);
return(1);
}
if(!SetCommState(Cport[comport_number], &port_settings))
{
printf("unable to set comport cfg settings\n");
CloseHandle(Cport[comport_number]);
return(1);
}
COMMTIMEOUTS Cptimeouts;
Cptimeouts.ReadIntervalTimeout = MAXDWORD;
Cptimeouts.ReadTotalTimeoutMultiplier = 0;
Cptimeouts.ReadTotalTimeoutConstant = 0;
Cptimeouts.WriteTotalTimeoutMultiplier = 0;
Cptimeouts.WriteTotalTimeoutConstant = 0;
if(!SetCommTimeouts(Cport[comport_number], &Cptimeouts))
{
printf("unable to set comport time-out settings\n");
CloseHandle(Cport[comport_number]);
return(1);
}
return(0);
}
示例8: osinterface_file_open
/**
*
* rct2: 0x00408060
*/
HANDLE osinterface_file_open(const char* filename)
{
return CreateFileA(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS | FILE_ATTRIBUTE_NORMAL, 0);
}
示例9: osinterface_file_create
/**
*
* rct2: 0x0040807D
*/
HANDLE osinterface_file_create(const char* filename)
{
return CreateFileA(filename, GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
}
示例10: RS232_OpenComport
//.........这里部分代码省略.........
switch(mode[0])
{
case '8': strcat(mode_str, " data=8");
break;
case '7': strcat(mode_str, " data=7");
break;
case '6': strcat(mode_str, " data=6");
break;
case '5': strcat(mode_str, " data=5");
break;
default : printf("invalid number of data-bits '%c'\n", mode[0]);
return(1);
break;
}
switch(mode[1])
{
case 'N':
case 'n': strcat(mode_str, " parity=n");
break;
case 'E':
case 'e': strcat(mode_str, " parity=e");
break;
case 'O':
case 'o': strcat(mode_str, " parity=o");
break;
default : printf("invalid parity '%c'\n", mode[1]);
return(1);
break;
}
switch(mode[2])
{
case '1': strcat(mode_str, " stop=1");
break;
case '2': strcat(mode_str, " stop=2");
break;
default : printf("invalid number of stop bits '%c'\n", mode[2]);
return(1);
break;
}
strcat(mode_str, " dtr=on rts=on");
/*
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363145%28v=vs.85%29.aspx
http://technet.microsoft.com/en-us/library/cc732236.aspx
*/
Cport[comport_number] = CreateFileA(comports[comport_number],
GENERIC_READ|GENERIC_WRITE,
0, /* no share */
NULL, /* no security */
OPEN_EXISTING,
0, /* no threads */
NULL); /* no templates */
if(Cport[comport_number]==INVALID_HANDLE_VALUE)
{
printf("unable to open comport\n");
return(1);
}
DCB port_settings;
memset(&port_settings, 0, sizeof(port_settings)); /* clear the new struct */
port_settings.DCBlength = sizeof(port_settings);
if(!BuildCommDCBA(mode_str, &port_settings))
{
printf("unable to set comport dcb settings\n");
CloseHandle(Cport[comport_number]);
return(1);
}
if(!SetCommState(Cport[comport_number], &port_settings))
{
printf("unable to set comport cfg settings\n");
CloseHandle(Cport[comport_number]);
return(1);
}
COMMTIMEOUTS Cptimeouts;
Cptimeouts.ReadIntervalTimeout = MAXDWORD;
Cptimeouts.ReadTotalTimeoutMultiplier = 0;
Cptimeouts.ReadTotalTimeoutConstant = 0;
Cptimeouts.WriteTotalTimeoutMultiplier = 0;
Cptimeouts.WriteTotalTimeoutConstant = 0;
if(!SetCommTimeouts(Cport[comport_number], &Cptimeouts))
{
printf("unable to set comport time-out settings\n");
CloseHandle(Cport[comport_number]);
return(1);
}
return(0);
}
示例11: main
//.........这里部分代码省略.........
" with wrong name returned [%u] while it should return [%u]\n"
,GetLastError(), ERROR_FILE_NOT_FOUND);
testPass = FALSE;
}
}
else
{
Trace("CopyFileA: managed to copy a file with wrong name\n");
testPass = FALSE;
}
/*............. Test CreateFileA..................................*/
/* test with an invalid file name */
hFile = CreateFileA(sBadFileName,
GENERIC_READ, /* open for reading */
FILE_SHARE_READ, /* share for reading */
NULL, /* no security */
OPEN_EXISTING, /* existing file only */
FILE_ATTRIBUTE_NORMAL, /* normal file */
NULL); /* no attr. template */
if (hFile == INVALID_HANDLE_VALUE)
{
if(GetLastError() != ERROR_FILE_NOT_FOUND)
{
Trace("CreateFileA: calling GetLastError() returned [%u] "
"while it should return [%u] for a bad File Name\n",
GetLastError(),ERROR_FILE_NOT_FOUND);
testPass = FALSE;
}
示例12: IDirectXFileImpl_CreateEnumObject
/*** IDirectXFile methods ***/
static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPVOID pvSource, DXFILELOADOPTIONS dwLoadOptions, LPDIRECTXFILEENUMOBJECT* ppEnumObj)
{
IDirectXFileImpl *This = impl_from_IDirectXFile(iface);
IDirectXFileEnumObjectImpl* object;
HRESULT hr;
LPBYTE file_buffer;
DWORD file_size;
DWORD bytes_written;
TRACE("(%p/%p)->(%p,%x,%p)\n", This, iface, pvSource, dwLoadOptions, ppEnumObj);
if (!ppEnumObj)
return DXFILEERR_BADVALUE;
/* Only lowest 4 bits are relevant in DXFILELOADOPTIONS */
dwLoadOptions &= 0xF;
hr = IDirectXFileEnumObjectImpl_Create(&object);
if (FAILED(hr))
return hr;
if (dwLoadOptions == DXFILELOAD_FROMFILE)
{
HANDLE hFile, file_mapping;
TRACE("Open source file '%s'\n", (char*)pvSource);
hFile = CreateFileA(pvSource, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
TRACE("File '%s' not found\n", (char*)pvSource);
return DXFILEERR_FILENOTFOUND;
}
file_size = GetFileSize(hFile, NULL);
file_mapping = CreateFileMappingA(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
CloseHandle(hFile);
if (!file_mapping)
{
hr = DXFILEERR_BADFILETYPE;
goto error;
}
object->mapped_memory = MapViewOfFile(file_mapping, FILE_MAP_READ, 0, 0, 0);
CloseHandle(file_mapping);
if (!object->mapped_memory)
{
hr = DXFILEERR_BADFILETYPE;
goto error;
}
file_buffer = object->mapped_memory;
}
else if (dwLoadOptions == DXFILELOAD_FROMRESOURCE)
{
HRSRC resource_info;
HGLOBAL resource_data;
LPDXFILELOADRESOURCE lpdxflr = pvSource;
TRACE("Source in resource (module = %p, name = %s, type = %s)\n", lpdxflr->hModule, debugstr_a(lpdxflr->lpName), debugstr_a(lpdxflr->lpType));
resource_info = FindResourceA(lpdxflr->hModule, lpdxflr->lpName, lpdxflr->lpType);
if (!resource_info)
{
hr = DXFILEERR_RESOURCENOTFOUND;
goto error;
}
file_size = SizeofResource(lpdxflr->hModule, resource_info);
resource_data = LoadResource(lpdxflr->hModule, resource_info);
if (!resource_data)
{
hr = DXFILEERR_BADRESOURCE;
goto error;
}
file_buffer = LockResource(resource_data);
if (!file_buffer)
{
hr = DXFILEERR_BADRESOURCE;
goto error;
}
}
else if (dwLoadOptions == DXFILELOAD_FROMMEMORY)
{
LPDXFILELOADMEMORY lpdxflm = pvSource;
TRACE("Source in memory at %p with size %d\n", lpdxflm->lpMemory, lpdxflm->dSize);
file_buffer = lpdxflm->lpMemory;
file_size = lpdxflm->dSize;
}
else
{
FIXME("Source type %d is not handled yet\n", dwLoadOptions);
hr = DXFILEERR_NOTDONEYET;
goto error;
}
//.........这里部分代码省略.........
示例13: main
// TODO: allow commandline options (v2)
// TODO: remove existing infs for similar devices (v2)
int __cdecl main(int argc_ansi, char** argv_ansi)
{
DWORD r;
BOOL b;
int i, ret, argc = argc_ansi, si=0;
char** argv = argv_ansi;
wchar_t **wenv, **wargv;
char* hardware_id = NULL;
char* device_id = NULL;
char* user_sid = NULL;
char* inf_name = NULL;
char path[MAX_PATH_LENGTH];
char destname[MAX_PATH_LENGTH];
uintptr_t syslog_reader_thid = -1L;
// Connect to the messaging pipe
pipe_handle = CreateFileA(INSTALLER_PIPE_NAME, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
if (pipe_handle == INVALID_HANDLE_VALUE) {
// If we can't connect to the pipe, someone is probably trying to run us standalone
printf("This application can not be run from the command line.\n");
printf("Please use your initial installer application if you want to install the driver.\n");
return WDI_ERROR_NOT_SUPPORTED;
}
if (init_dlls()) {
plog("could not init DLLs");
ret = WDI_ERROR_RESOURCE;
goto out;
}
// Initialize COM for Restore Point disabling
IGNORE_RETVAL(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED));
// libwdi provides the arguments as UTF-16 => read them and convert to UTF-8
if (__wgetmainargs != NULL) {
__wgetmainargs(&argc, &wargv, &wenv, 1, &si);
argv = calloc(argc, sizeof(char*));
for (i=0; i<argc; i++) {
argv[i] = wchar_to_utf8(wargv[i]);
}
} else {
plog("unable to access UTF-16 args - trying ANSI");
}
if (argc < 2) {
printf("usage: %s <inf_name>\n", argv[0]);
plog("missing inf_name parameter");
}
inf_name = argv[1];
plog("got parameter %s", argv[1]);
r = GetFullPathNameU(".", MAX_PATH_LENGTH, path, NULL);
if ((r == 0) || (r > MAX_PATH_LENGTH)) {
plog("could not retrieve absolute path of working directory");
ret = WDI_ERROR_ACCESS;
goto out;
}
safe_strcat(path, MAX_PATH_LENGTH, "\\");
safe_strcat(path, MAX_PATH_LENGTH, inf_name);
device_id = req_id(IC_GET_DEVICE_ID);
hardware_id = req_id(IC_GET_HARDWARE_ID);
// Will be used if we ever need to create a file, as the original user, from this app
user_sid = req_id(IC_GET_USER_SID);
ConvertStringSidToSidA(user_sid, &user_psid);
// Setup the syslog reader thread
syslog_ready_event = CreateEvent(NULL, TRUE, FALSE, NULL);
syslog_terminate_event = CreateEvent(NULL, TRUE, FALSE, NULL);
syslog_reader_thid = _beginthread(syslog_reader_thread, 0, 0);
if ( (syslog_reader_thid == -1L)
|| (WaitForSingleObject(syslog_ready_event, 2000) != WAIT_OBJECT_0) ) {
plog("Unable to create syslog reader thread");
SetEvent(syslog_terminate_event);
// NB: if you try to close the syslog reader thread handle, you get a
// "more recent driver was found" error from UpdateForPnP. Weird...
}
// Disable the creation of a restore point
disable_system_restore(TRUE);
// Find if the device is plugged in
send_status(IC_SET_TIMEOUT_INFINITE);
if (hardware_id != NULL) {
plog("Installing driver for %s - please wait...", hardware_id);
b = UpdateDriverForPlugAndPlayDevicesU(NULL, hardware_id, path, INSTALLFLAG_FORCE, NULL);
send_status(IC_SET_TIMEOUT_DEFAULT);
if (b == TRUE) {
// Success
plog("driver update completed");
enumerate_device(device_id);
ret = WDI_SUCCESS;
goto out;
}
ret = process_error(GetLastError(), path);
if (ret != WDI_SUCCESS) {
//.........这里部分代码省略.........
示例14: syslog_reader_thread
/*
* Read from the driver installation syslog in real-time
*/
void __cdecl syslog_reader_thread(void* param)
{
#define NB_SYSLOGS 3
char* syslog_name[NB_SYSLOGS] = { "\\inf\\setupapi.dev.log", "\\setupapi.log", "\\setupact.log" };
HANDLE log_handle;
DWORD last_offset, size, read_size, processed_size;
char *buffer = NULL;
char log_path[MAX_PATH_LENGTH];
DWORD duration = 0;
int i;
// Try the various driver installation logs
for (i=0; i<NB_SYSLOGS; i++) {
safe_strcpy(log_path, MAX_PATH_LENGTH, getenv("WINDIR")); // Use %WINDIR% env variable
safe_strcat(log_path, MAX_PATH_LENGTH, syslog_name[i]);
log_handle = CreateFileA(log_path, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (log_handle != INVALID_HANDLE_VALUE) {
plog("using syslog '%s'", log_path);
break;
}
}
if (i == NB_SYSLOGS) {
plog("Could not open any syslog");
goto out;
}
// We assert that the log file is never gonna be bigger than 2 GB
// TODO: special case of setupapi.dev.log's last offset not being the end (v2)
last_offset = SetFilePointer(log_handle, 0, NULL, FILE_END);
if (last_offset == INVALID_SET_FILE_POINTER) {
plog("Could not set syslog offset");
goto out;
}
plog("sylog reader thread started");
SetEvent(syslog_ready_event);
processed_size = 0;
while(WaitForSingleObject(syslog_terminate_event, 0) != WAIT_OBJECT_0) {
// Find out if file size has increased since last time
size = GetFileSize(log_handle, NULL);
if (size == INVALID_FILE_SIZE) {
plog("could not read syslog file size");
goto out;
}
size -= last_offset;
if (size != 0) {
// Read from file and add a zero terminator
buffer = malloc(size+1);
if (buffer == NULL) {
plog("could not allocate buffer to read syslog");
goto out;
}
// Keep an extra spare byte at the beginning
if (!ReadFile(log_handle, buffer, size, &read_size, NULL)) {
plog("failed to read syslog");
goto out;
}
buffer[read_size] = 0;
// Send all the complete lines through the pipe
processed_size = process_syslog(buffer, read_size);
safe_free(buffer);
last_offset += processed_size;
// Reposition at start of last line if needed
if (processed_size != read_size) {
last_offset = SetFilePointer(log_handle, processed_size-read_size, NULL, FILE_CURRENT);
if (last_offset == INVALID_SET_FILE_POINTER) {
plog("Could not set syslog offset");
goto out;
}
}
// Reset adaptive sleep duration if we did send data out
if (processed_size !=0) {
duration = 0;
}
}
// Compute adaptive sleep duration
if (((size == 0) || (processed_size == 0)) && (duration < 500)) {
duration += 100; // read log more frequently on recent update
}
Sleep(duration);
}
out:
plog("syslog reader thread terminating");
safe_free(buffer);
CloseHandle(log_handle);
_endthread();
}
示例15: process_start
int process_start(char *name, char *part, process_info_t *p, int is_helper) {
HANDLE file = INVALID_HANDLE_VALUE;
HANDLE nul = INVALID_HANDLE_VALUE;
WCHAR path[MAX_PATH], filename[MAX_PATH];
WCHAR image[MAX_PATH + 1];
WCHAR args[MAX_PATH * 2];
STARTUPINFOW si;
PROCESS_INFORMATION pi;
DWORD result;
if (GetTempPathW(sizeof(path) / sizeof(WCHAR), (WCHAR*)&path) == 0)
goto error;
if (GetTempFileNameW((WCHAR*)&path, L"uv", 0, (WCHAR*)&filename) == 0)
goto error;
file = CreateFileW((WCHAR*)filename,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE,
NULL);
if (file == INVALID_HANDLE_VALUE)
goto error;
if (!SetHandleInformation(file, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT))
goto error;
nul = CreateFileA("nul",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (nul == INVALID_HANDLE_VALUE)
goto error;
if (!SetHandleInformation(nul, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT))
goto error;
result = GetModuleFileNameW(NULL,
(WCHAR*) &image,
sizeof(image) / sizeof(WCHAR));
if (result == 0 || result == sizeof(image))
goto error;
if (part) {
if (_snwprintf((WCHAR*)args,
sizeof(args) / sizeof(WCHAR),
L"\"%s\" %S %S",
image,
name,
part) < 0) {
goto error;
}
} else {
if (_snwprintf((WCHAR*)args,
sizeof(args) / sizeof(WCHAR),
L"\"%s\" %S",
image,
name) < 0) {
goto error;
}
}
memset((void*)&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = nul;
si.hStdOutput = file;
si.hStdError = file;
if (!CreateProcessW(image, args, NULL, NULL, TRUE,
0, NULL, NULL, &si, &pi))
goto error;
CloseHandle(pi.hThread);
SetHandleInformation(nul, HANDLE_FLAG_INHERIT, 0);
SetHandleInformation(file, HANDLE_FLAG_INHERIT, 0);
p->stdio_in = nul;
p->stdio_out = file;
p->process = pi.hProcess;
p->name = part;
return 0;
error:
if (file != INVALID_HANDLE_VALUE)
CloseHandle(file);
if (nul != INVALID_HANDLE_VALUE)
CloseHandle(nul);
return -1;
}