On Aug 1 14:51, Frank Fesevur wrote: > Saro Engels wrote: > >Frank Fesevur schrieb: > >> > >>[EMAIL PROTECTED] /cygdrive/d/Software > >>$ ./getvolinfo.exe z: > >> > > > >Have you tried ./getvolinfo.exe Z: > >with capital Z? > > Just tried and it does not make any difference. Turn out that when I run > it on a local NTFS drive (C:), it gives no result either. It is session > on the console of a Win2003 Server with SP2 logged in Administrator.
Weird. Try the attached one instead. It adds error output. Thanks, Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat
#include <stdio.h> #include <string.h> #include <sys/cygwin.h> #define _WIN32_WINNT 0x0600 #include <windows.h> #include <ddk/ntifs.h> #include <wchar.h> #ifndef FILE_READ_ONLY_VOLUME #define FILE_READ_ONLY_VOLUME 0x80000 #endif #ifndef FILE_SEQUENTIAL_WRITE_ONCE #define FILE_SEQUENTIAL_WRITE_ONCE 0x100000 #endif #ifndef FILE_SUPPORTS_TRANSACTIONS #define FILE_SUPPORTS_TRANSACTIONS 0x200000 #endif BOOL NTAPI RtlCreateUnicodeStringFromAsciiz (PUNICODE_STRING, PCSTR); int __stdcall sys_wcstombs (char *tgt, int tlen, const WCHAR *src, int slen) { int ret; ret = WideCharToMultiByte (GetOEMCP (), 0, src, slen, tgt, tlen, NULL, NULL); if (ret) tgt[ret < tlen ? ret : tlen - 1] = '\0'; return ret; } int main (int argc, char **argv) { char winpath[256]; DWORD flags = 0; HANDLE h; UNICODE_STRING wpath; UNICODE_STRING upath; OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; NTSTATUS stat; ULONG ret; if (argc < 2) { fprintf (stderr, "usage: %s path\n", argv[0]); return 1; } cygwin_conv_to_full_win32_path (argv[1], winpath); if (!RtlCreateUnicodeStringFromAsciiz (&wpath, winpath)) { fprintf (stderr, "RtlCreateUnicodeStringFromAsciiz failed\n"); return 1; } if (!RtlDosPathNameToNtPathName_U (wpath.Buffer, &upath, NULL, NULL)) { fprintf (stderr, "RtlDosPathNameToNtPathName_U failed\n"); RtlFreeUnicodeString (&wpath); return 1; } InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, NULL, NULL); stat = ZwOpenFile (&h, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT); if (!NT_SUCCESS (stat) && stat == STATUS_NO_MEDIA_IN_DEVICE) { upath.Length = 6 * sizeof (WCHAR); stat = ZwOpenFile (&h, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS, 0); } if (!NT_SUCCESS (stat)) { char buf[1024]; wcstombs (buf, upath.Buffer, upath.Length / sizeof (WCHAR)); buf[upath.Length / sizeof (WCHAR)] = '\0'; fprintf (stderr, "ZwOpenFile(%s) failed, %08x\n", buf, stat); return 1; } char buf[1024]; char name[256]; stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024, FileFsDeviceInformation); if (NT_SUCCESS (stat)) { PFILE_FS_DEVICE_INFORMATION pfi = (PFILE_FS_DEVICE_INFORMATION) buf; printf ("Device Type : %lx\n", pfi->DeviceType); printf ("Characteristics : %lx\n", pfi->Characteristics); } else fprintf (stderr, "FileFsDeviceInformation failed, %08lx\n", stat); stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024, FileFsVolumeInformation); if (NT_SUCCESS (stat)) { PFILE_FS_VOLUME_INFORMATION pfi = (PFILE_FS_VOLUME_INFORMATION) buf; if (pfi->VolumeLabelLength) { sys_wcstombs (name, 256, pfi->VolumeLabel, pfi->VolumeLabelLength / sizeof (WCHAR)); printf ("Volume Name : <%s>\n", name); } else printf ("Volume Name : <>\n"); printf ("Serial Number : %lu\n", pfi->VolumeSerialNumber); } else fprintf (stderr, "FileFsVolumeInformation failed, %08lx\n", stat); stat = ZwQueryVolumeInformationFile (h, &io, buf, 1024, FileFsAttributeInformation); if (NT_SUCCESS (stat)) { PFILE_FS_ATTRIBUTE_INFORMATION pfi = (PFILE_FS_ATTRIBUTE_INFORMATION) buf; printf ("Max Filenamelength : %lu\n",pfi->MaximumComponentNameLength); sys_wcstombs (name, 256, pfi->FileSystemName, pfi->FileSystemNameLength / sizeof (WCHAR)); printf ("Filesystemname : <%s>\n", name); printf ("Flags : %lx\n", flags = pfi->FileSystemAttributes); printf (" FILE_CASE_SENSITIVE_SEARCH : %s\n", (flags & FILE_CASE_SENSITIVE_SEARCH) ? "TRUE" : "FALSE"); printf (" FILE_CASE_PRESERVED_NAMES : %s\n", (flags & FILE_CASE_PRESERVED_NAMES) ? "TRUE" : "FALSE"); printf (" FILE_UNICODE_ON_DISK : %s\n", (flags & FILE_UNICODE_ON_DISK) ? "TRUE" : "FALSE"); printf (" FILE_PERSISTENT_ACLS : %s\n", (flags & FILE_PERSISTENT_ACLS) ? "TRUE" : "FALSE"); printf (" FILE_FILE_COMPRESSION : %s\n", (flags & FILE_FILE_COMPRESSION) ? "TRUE" : "FALSE"); printf (" FILE_VOLUME_QUOTAS : %s\n", (flags & FILE_VOLUME_QUOTAS) ? "TRUE" : "FALSE"); printf (" FILE_SUPPORTS_SPARSE_FILES : %s\n", (flags & FILE_SUPPORTS_SPARSE_FILES) ? "TRUE" : "FALSE"); printf (" FILE_SUPPORTS_REPARSE_POINTS: %s\n", (flags & FILE_SUPPORTS_REPARSE_POINTS) ? "TRUE" : "FALSE"); printf (" FILE_SUPPORTS_REMOTE_STORAGE: %s\n", (flags & FILE_SUPPORTS_REMOTE_STORAGE) ? "TRUE" : "FALSE"); printf (" FILE_VOLUME_IS_COMPRESSED : %s\n", (flags & FILE_VOLUME_IS_COMPRESSED) ? "TRUE" : "FALSE"); printf (" FILE_SUPPORTS_OBJECT_IDS : %s\n", (flags & FILE_SUPPORTS_OBJECT_IDS) ? "TRUE" : "FALSE"); printf (" FILE_SUPPORTS_ENCRYPTION : %s\n", (flags & FILE_SUPPORTS_ENCRYPTION) ? "TRUE" : "FALSE"); printf (" FILE_NAMED_STREAMS : %s\n", (flags & FILE_NAMED_STREAMS) ? "TRUE" : "FALSE"); printf (" FILE_READ_ONLY_VOLUME : %s\n", (flags & FILE_READ_ONLY_VOLUME) ? "TRUE" : "FALSE"); printf (" FILE_SEQUENTIAL_WRITE_ONCE : %s\n", (flags & FILE_SEQUENTIAL_WRITE_ONCE) ? "TRUE" : "FALSE"); printf (" FILE_SUPPORTS_TRANSACTIONS : %s\n", (flags & FILE_SUPPORTS_TRANSACTIONS) ? "TRUE" : "FALSE"); } else fprintf (stderr, "FileFsAttributeInformation failed, %08lx\n", stat); ZwClose (h); RtlFreeUnicodeString (&upath); RtlFreeUnicodeString (&wpath); return 0; }
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/