From: I.You on 16 Feb 2007 05:16 Hi everyone. What I'm trying to do is that detecting all disks and all partitions (mounted or not) in system and then mounting (and assigning a drive letter) the partition if it's ext2 filesystem. So I try to write the APPLICATION program, which loads the ext2 filesystem driver for windows. In order to do this, I tried to use a few DDK functions (Nt*** functions) but it's failed. So now I'm trying to use GetVolumeInformation but it's not good too. I have no idea what to do. Is there any good idea? Anyway, I'm considering as follow: 1. Retrieving currently assigned drive letters (including CD-ROM drive). Q: Is it possible for "QueryDosDevice" to detect CD-ROM drive? If not, other ways? 2. Retrieving the number of disks and partitions in each disk in system. Q: IOCTL_DISK_GET_DRIVE_LAYOUT_EX is for Retrieving the number of partitions, then the number of disks? 3. Retrieving the filesystem name or something of each partition which is not mounted. Q: Is it possible to retrieve the filesystem name of each partition by using DeviceIoControl? However, I wonder how to retrieve information about each partition in DeviceIoControl, since the device it handles is not each partition but filesystem driver. I have no idea how to solve this because I'm a beginner. So I think writing my own kernel-mode module is too difficult. I wish your good advices.
From: David Craig on 16 Feb 2007 12:11 This is the wrong group for this type of discussion. The is a win32 newsgroup which means a Windows application and the win32k.sys driver and its calling DLLs. File systems are not a part of this arena. If you can't write kernel mode code, then you are doomed to failure since you state: "Retrieving the filesystem name or something of each partition which is not mounted". All partitions are mounted and I would suggest you look into the raw file system. I have heard of using an Explorer extension to permit access to non supported file systems, but that is not a real file system and it is not available to any other programs. "I.You" <IYou(a)discussions.microsoft.com> wrote in message news:5C369229-C266-4A2C-ADB6-70153E4B55E6(a)microsoft.com... > Hi everyone. > > What I'm trying to do is that detecting all disks and all partitions > (mounted or not) in system and then mounting (and assigning a drive > letter) > the partition if it's ext2 filesystem. > So I try to write the APPLICATION program, which loads the ext2 filesystem > driver for windows. > > In order to do this, I tried to use a few DDK functions (Nt*** functions) > but it's failed. So now I'm trying to use GetVolumeInformation but it's > not > good too. > > I have no idea what to do. Is there any good idea? > > Anyway, I'm considering as follow: > > 1. Retrieving currently assigned drive letters (including CD-ROM drive). > Q: Is it possible for "QueryDosDevice" to detect CD-ROM drive? If not, > other > ways? > > 2. Retrieving the number of disks and partitions in each disk in system. > Q: IOCTL_DISK_GET_DRIVE_LAYOUT_EX is for Retrieving the number of > partitions, then the number of disks? > > 3. Retrieving the filesystem name or something of each partition which is > not mounted. > Q: Is it possible to retrieve the filesystem name of each partition by > using > DeviceIoControl? However, I wonder how to retrieve information about each > partition in DeviceIoControl, since the device it handles is not each > partition but filesystem driver. > > > I have no idea how to solve this because I'm a beginner. > So I think writing my own kernel-mode module is too difficult. > > I wish your good advices. > >
From: Don Burn on 16 Feb 2007 12:43 As David said, without kernel code you are doomed. First note, you are trying to break the Windows model since you should have a file system recognizer (a kernel driver) that recognizes and loads the file system. I have had the pain of dealing with a crappy solution like you are trying (it wiped out a valid file system I was working on!). The place to ask file system questions is NTFSD at http://www.osronline.com/ -- Don Burn (MVP, Windows DDK) Windows 2k/XP/2k3 Filesystem and Driver Consulting http://www.windrvr.com Remove StopSpam from the email to reply "David Craig" <dave(a)yoshimuni.com> wrote in message news:OzGQ71eUHHA.4632(a)TK2MSFTNGP04.phx.gbl... > This is the wrong group for this type of discussion. The is a win32 > newsgroup which means a Windows application and the win32k.sys driver and > its calling DLLs. File systems are not a part of this arena. If you > can't write kernel mode code, then you are doomed to failure since you > state: "Retrieving the filesystem name or something of each partition > which is not mounted". All partitions are mounted and I would suggest > you look into the raw file system. I have heard of using an Explorer > extension to permit access to non supported file systems, but that is not > a real file system and it is not available to any other programs. > > "I.You" <IYou(a)discussions.microsoft.com> wrote in message > news:5C369229-C266-4A2C-ADB6-70153E4B55E6(a)microsoft.com... >> Hi everyone. >> >> What I'm trying to do is that detecting all disks and all partitions >> (mounted or not) in system and then mounting (and assigning a drive >> letter) >> the partition if it's ext2 filesystem. >> So I try to write the APPLICATION program, which loads the ext2 >> filesystem >> driver for windows. >> >> In order to do this, I tried to use a few DDK functions (Nt*** >> functions) >> but it's failed. So now I'm trying to use GetVolumeInformation but it's >> not >> good too. >> >> I have no idea what to do. Is there any good idea? >> >> Anyway, I'm considering as follow: >> >> 1. Retrieving currently assigned drive letters (including CD-ROM drive). >> Q: Is it possible for "QueryDosDevice" to detect CD-ROM drive? If not, >> other >> ways? >> >> 2. Retrieving the number of disks and partitions in each disk in system. >> Q: IOCTL_DISK_GET_DRIVE_LAYOUT_EX is for Retrieving the number of >> partitions, then the number of disks? >> >> 3. Retrieving the filesystem name or something of each partition which >> is >> not mounted. >> Q: Is it possible to retrieve the filesystem name of each partition by >> using >> DeviceIoControl? However, I wonder how to retrieve information about >> each >> partition in DeviceIoControl, since the device it handles is not each >> partition but filesystem driver. >> >> >> I have no idea how to solve this because I'm a beginner. >> So I think writing my own kernel-mode module is too difficult. >> >> I wish your good advices. >> >> > >
From: I.You on 19 Feb 2007 04:08 Thanks a lot, David and Don. I need a lot studies... "Don Burn" wrote: > As David said, without kernel code you are doomed. First note, you are > trying to break the Windows model since you should have a file system > recognizer (a kernel driver) that recognizes and loads the file system. I > have had the pain of dealing with a crappy solution like you are trying (it > wiped out a valid file system I was working on!). > > The place to ask file system questions is NTFSD at > http://www.osronline.com/ > > > -- > Don Burn (MVP, Windows DDK) > Windows 2k/XP/2k3 Filesystem and Driver Consulting > http://www.windrvr.com > Remove StopSpam from the email to reply > > > > > "David Craig" <dave(a)yoshimuni.com> wrote in message > news:OzGQ71eUHHA.4632(a)TK2MSFTNGP04.phx.gbl... > > This is the wrong group for this type of discussion. The is a win32 > > newsgroup which means a Windows application and the win32k.sys driver and > > its calling DLLs. File systems are not a part of this arena. If you > > can't write kernel mode code, then you are doomed to failure since you > > state: "Retrieving the filesystem name or something of each partition > > which is not mounted". All partitions are mounted and I would suggest > > you look into the raw file system. I have heard of using an Explorer > > extension to permit access to non supported file systems, but that is not > > a real file system and it is not available to any other programs. > > > > "I.You" <IYou(a)discussions.microsoft.com> wrote in message > > news:5C369229-C266-4A2C-ADB6-70153E4B55E6(a)microsoft.com... > >> Hi everyone. > >> > >> What I'm trying to do is that detecting all disks and all partitions > >> (mounted or not) in system and then mounting (and assigning a drive > >> letter) > >> the partition if it's ext2 filesystem. > >> So I try to write the APPLICATION program, which loads the ext2 > >> filesystem > >> driver for windows. > >> > >> In order to do this, I tried to use a few DDK functions (Nt*** > >> functions) > >> but it's failed. So now I'm trying to use GetVolumeInformation but it's > >> not > >> good too. > >> > >> I have no idea what to do. Is there any good idea? > >> > >> Anyway, I'm considering as follow: > >> > >> 1. Retrieving currently assigned drive letters (including CD-ROM drive). > >> Q: Is it possible for "QueryDosDevice" to detect CD-ROM drive? If not, > >> other > >> ways? > >> > >> 2. Retrieving the number of disks and partitions in each disk in system. > >> Q: IOCTL_DISK_GET_DRIVE_LAYOUT_EX is for Retrieving the number of > >> partitions, then the number of disks? > >> > >> 3. Retrieving the filesystem name or something of each partition which > >> is > >> not mounted. > >> Q: Is it possible to retrieve the filesystem name of each partition by > >> using > >> DeviceIoControl? However, I wonder how to retrieve information about > >> each > >> partition in DeviceIoControl, since the device it handles is not each > >> partition but filesystem driver. > >> > >> > >> I have no idea how to solve this because I'm a beginner. > >> So I think writing my own kernel-mode module is too difficult. > >> > >> I wish your good advices. > >> > >> > > > > > > >
From: bansalvikrant on 20 Feb 2007 07:59 On Feb 19, 2:08 pm, I.You <I...(a)discussions.microsoft.com> wrote: > Thanks a lot, David and Don. > > I need a lot studies... > > > > "Don Burn" wrote: > > As David said, without kernel code you are doomed. First note, you are > > trying to break the Windows model since you should have a file system > > recognizer (a kernel driver) that recognizes and loads the file system. I > > have had the pain of dealing with a crappy solution like you are trying (it > > wiped out a valid file system I was working on!). > > > The place to ask file system questions is NTFSD at > >http://www.osronline.com/ > > > -- > > Don Burn (MVP, Windows DDK) > > Windows 2k/XP/2k3 Filesystem and Driver Consulting > >http://www.windrvr.com > > Remove StopSpam from the email to reply > > > "David Craig" <d...(a)yoshimuni.com> wrote in message > >news:OzGQ71eUHHA.4632(a)TK2MSFTNGP04.phx.gbl... > > > This is the wrong group for this type of discussion. The is a win32 > > > newsgroup which means a Windows application and the win32k.sys driver and > > > its calling DLLs. File systems are not a part of this arena. If you > > > can't write kernel mode code, then you are doomed to failure since you > > > state: "Retrieving the filesystem name or something of each partition > > > which is not mounted". All partitions are mounted and I would suggest > > > you look into the raw file system. I have heard of using an Explorer > > > extension to permit access to non supported file systems, but that is not > > > a real file system and it is not available to any other programs. > > > > "I.You" <I...(a)discussions.microsoft.com> wrote in message > > >news:5C369229-C266-4A2C-ADB6-70153E4B55E6(a)microsoft.com... > > >> Hi everyone. > > > >> What I'm trying to do is that detecting all disks and all partitions > > >> (mounted or not) in system and then mounting (and assigning a drive > > >> letter) > > >> the partition if it's ext2 filesystem. > > >> So I try to write the APPLICATION program, which loads the ext2 > > >> filesystem > > >> driver for windows. > > > >> In order to do this, I tried to use a few DDK functions (Nt*** > > >> functions) > > >> but it's failed. So now I'm trying to use GetVolumeInformation but it's > > >> not > > >> good too. > > > >> I have no idea what to do. Is there any good idea? > > > >> Anyway, I'm considering as follow: > > > >> 1. Retrieving currently assigned drive letters (including CD-ROM drive). > > >> Q: Is it possible for "QueryDosDevice" to detect CD-ROM drive? If not, > > >> other > > >> ways? > > > >> 2. Retrieving the number of disks and partitions in each disk in system. > > >> Q: IOCTL_DISK_GET_DRIVE_LAYOUT_EX is for Retrieving the number of > > >> partitions, then the number of disks? > > > >> 3. Retrieving the filesystem name or something of each partition which > > >> is > > >> not mounted. > > >> Q: Is it possible to retrieve the filesystem name of each partition by > > >> using > > >> DeviceIoControl? However, I wonder how to retrieve information about > > >> each > > >> partition in DeviceIoControl, since the device it handles is not each > > >> partition but filesystem driver. > > > >> I have no idea how to solve this because I'm a beginner. > > >> So I think writing my own kernel-mode module is too difficult. > > > >> I wish your good advices.- Hide quoted text - > > - Show quoted text - Finding number of Disks: CString HDDetails(int* HDCount) { int index=0; HANDLE hDevice; CString Result; CString HardDisk; DWORD junk; DISK_GEOMETRY pdg; HardDisk.Format(L"\\\\.\\PhysicalDrive%d",index); hDevice=CreateFile(HardDisk,0,FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,OPEN_EXISTING,0,NULL); if (hDevice==INVALID_HANDLE_VALUE) Result="Error: Can not Query Hard Disk Drives."; while (hDevice!=INVALID_HANDLE_VALUE) { BOOL bResult=DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL,0, &pdg,sizeof(DISK_GEOMETRY), &junk, (LPOVERLAPPED) NULL); if (bResult) { CString Temp; Temp.Format(L"--- Hard Disk No. %d ---\r\n",index+1); Result+=Temp; Temp.Format(L"Cylinders: %I64d\r\n",pdg.Cylinders); Result+=Temp; Temp.Format(L"Tracks per cylinder: %ld\r\n",(ULONG) pdg.TracksPerCylinder); Result+=Temp; Temp.Format(L"Sectors per track: %ld\r\n",(ULONG) pdg.SectorsPerTrack); Result+=Temp; Temp.Format(L"Bytes per sector: %ld\r\n",(ULONG) pdg.BytesPerSector); Result+=Temp; ULONGLONG DiskSize=pdg.Cylinders.QuadPart * (ULONG) pdg.TracksPerCylinder * (ULONG) pdg.SectorsPerTrack * (ULONG) pdg.BytesPerSector; Temp.Format(L"Total size: %I64d (Bytes) -> %I64d (MB) -> %I64d (GB) \r\n\r\n",DiskSize, DiskSize/1024/1024, DiskSize/1024/1024/1024); Result+=Temp; } CloseHandle(hDevice); index++; HardDisk.Format(L"\\\\.\\PhysicalDrive%d",index); hDevice=CreateFile(HardDisk,0,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,0,NULL); } CString Temp; Temp.Format(L"Number of Hard Disk Drives: %d\r\n\r\n",index); Result=Temp+Result; *HDCount = index; return Result; } Number of Partitions: CString QueryPartitions() { int index=0; HANDLE hDevice; CString Result; CString HardDisk; DWORD junk = 0; //DRIVE_LAYOUT_INFORMATION_EX dli, *pdli; //WCHAR dli1[sizeof(DRIVE_LAYOUT_INFORMATION_EX) + MAX_PARTITIONS * sizeof(PARTITION_INFORMATION_EX)]; //ZeroMemory(&dli1, sizeof(dli1)); //dli. DRIVE_LAYOUT_INFORMATION_EX dli2[1000]; DRIVE_LAYOUT_INFORMATION_EX dli; ZeroMemory(dli2, 1000 * sizeof(DRIVE_LAYOUT_INFORMATION_EX)); HardDisk.Format(L"\\\\.\\PhysicalDrive%d",index); hDevice=CreateFile(HardDisk,0,FILE_SHARE_READ, NULL,OPEN_EXISTING,0,NULL); if (hDevice==INVALID_HANDLE_VALUE) Result="Error: Can not Query Partitions."; while (hDevice!=INVALID_HANDLE_VALUE) { BOOL bResult=DeviceIoControl(hDevice,IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL,0, dli2, 1000 * sizeof(DRIVE_LAYOUT_INFORMATION_EX), &junk, (LPOVERLAPPED) NULL); if (bResult) { CString Temp; //pdli = (DRIVE_LAYOUT_INFORMATION_EX *)dli1; //dli = *pdli; dli = dli2[0]; Temp.Format(L"Number of partitions in physical disk %d is %d\r \n",index+1, dli.PartitionCount); Result+=Temp; for (DWORD iCounter=0;iCounter<dli.PartitionCount;iCounter++) { Temp.Format(L"\r\nPartition No.: %d", iCounter); Result+=Temp; switch (dli.PartitionStyle) { case PARTITION_STYLE_MBR: Temp.Format(L"Partition Style: MBR " L"(standard AT-style master boot records)\r\n"); Result+=Temp; Temp.Format(L"Signature: %ld\r\n", dli.Mbr.Signature); Result+=Temp; break; case PARTITION_STYLE_GPT: Temp.Format(L"Partition Style: GPT\r\n"); Result+=Temp; WCHAR guid[100]; StringFromGUID2(dli.Gpt.DiskId, guid, 100); Temp.Format(L"Disk ID: %s\r\n", guid); Result+=Temp; Temp.Format(L"Starting byte offset of the first usable block: %I64d\r\n", dli.Gpt.StartingUsableOffset); Result+=Temp; Temp.Format(L"Size of the usable blocks on the disk (bytes): %I64d \r\n", dli.Gpt.UsableLength); Result+=Temp; Temp.Format(L"Maximum number of partitions that can be defined in the usable block: %d", dli.Gpt.MaxPartitionCount); Result+=Temp; break; case PARTITION_STYLE_RAW: Temp.Format(L"Partition Style: RAW " L"(Partition not formatted in either of " L"the recognized formats-MBR or GPT\r\n"); Result+=Temp; break; default: Temp.Format(L"Not recognized\r\n"); Result+=Temp; } //switch _tprintf(_T("\Partitons details %s"),Result); } //for } //if else { LPSTR MessageBuffer; DWORD dwFormatFlags=FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM ; FormatMessageA(dwFormatFlags, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) &MessageBuffer, 0, NULL); Result+=MessageBuffer; LocalFree(MessageBuffer); } CloseHandle(hDevice); index++; HardDisk.Format(L"\\\\.\\PhysicalDrive%d",index); hDevice=CreateFile(HardDisk,0,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,0,NULL); } //while return Result; } Type of Disks : Removable / CDROM etc driveType = GetDriveType("c:\\"); switch (driveType) { case 0: cout << "error\n"; break; case 1: cout << "Drive does not exist\n"; break; case DRIVE_REMOVABLE: cout << "Media removable\n"; break; case DRIVE_FIXED: cout << "Fixed disk\n"; break; case DRIVE_REMOTE: cout << "Network drive\n"; break; case DRIVE_CDROM: cout << "CD-ROM drive\n"; break; case DRIVE_RAMDISK: cout << "RAM disk\n"; break; } Finding Logical mapping void main() { DWORD len; char buffer[1000]; char *p; len = GetLogicalDriveStrings(1000, buffer); cout << "Logical drives on this machine: \n"; for (p=buffer; *p != '\0'; p++) { cout << p << endl; while (*p != '\0') p++; } } Thanks Vikrant
|
Pages: 1 Prev: Get MAC address Next: Performance problem with UnmapViewOfFile() in Vista and XP x64 |