#include #include #include #include #if __LP64__ #define PRIuDWORD "u" #define PRIxDWORD "x" #else #define PRIuDWORD "lu" #define PRIxDWORD "lx" #endif static const char* geterr(DWORD err) { static char msg[1024]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)msg, sizeof(msg), NULL); return msg; } int main(int argc, char* argv[]) { int i; int exitstatus = 0; for (i = 1; i < argc; i++) { HANDLE file; DWORD err, bytesWritten; NTSTATUS ntstatus; IO_STATUS_BLOCK io; FILE_NETWORK_OPEN_INFORMATION fnoi; FILE_STANDARD_INFORMATION fsi; file = CreateFileA(argv[i], GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (file == INVALID_HANDLE_VALUE) { err = GetLastError(); fprintf(stderr, "%s: CreateFile: %s (err 0x%08" PRIxDWORD")\n", argv[i], geterr(err), err); exitstatus++; continue; } if (!WriteFile(file, "Hello world!\n", 12, &bytesWritten, NULL) || bytesWritten != 12) { err = GetLastError(); fprintf(stderr, "%s: WriteFile: %s (err 0x%08" PRIxDWORD ")\n", argv[i], geterr(err), err); CloseHandle(file); exitstatus++; continue; } ntstatus = NtQueryInformationFile (file, &io, &fnoi, sizeof fnoi, FileNetworkOpenInformation); if (!NT_SUCCESS (ntstatus)) { fprintf (stderr, "%s: NtQueryInformationFile(FileNetworkOpenInformation): %s (err 0x%08" PRIxDWORD ")\n", argv[i], geterr(ntstatus), ntstatus); } else { printf("%s: NtQueryInformationFile(FileNetworkOpenInformation): EndOfFile=%" PRIu64 "\n", argv[i], (uint64_t)fnoi.EndOfFile.QuadPart); } ntstatus = NtQueryInformationFile (file, &io, &fsi, sizeof fsi, FileStandardInformation); if (!NT_SUCCESS (ntstatus)) { fprintf (stderr, "%s: NtQueryInformationFile(FileStandardInformation): %s (err 0x%08" PRIxDWORD ")\n", argv[i], geterr(ntstatus), ntstatus); } else { printf("%s: NtQueryInformationFile(FileStandardInformation): EndOfFile=%" PRIu64 "\n", argv[i], (uint64_t)fsi.EndOfFile.QuadPart); } if (!CloseHandle(file)) { err = GetLastError(); fprintf(stderr, "%s: CloseHandle: %s (err %" PRIxDWORD ")\n", argv[i], geterr(err), err); exitstatus++; continue; } } return exitstatus; }