-/* $Id: volume.c,v 1.18 2000/08/25 15:52:56 ekohl Exp $
+/* $Id: volume.c,v 1.19 2001/06/11 19:54:05 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
#define MAX_DOS_DRIVES 26
-DWORD
-STDCALL
+DWORD STDCALL
GetLogicalDriveStringsA(DWORD nBufferLength,
LPSTR lpBuffer)
{
}
-DWORD
-STDCALL
+DWORD STDCALL
GetLogicalDriveStringsW(DWORD nBufferLength,
LPWSTR lpBuffer)
{
}
-DWORD
-STDCALL
+DWORD STDCALL
GetLogicalDrives(VOID)
{
return (((PKUSER_SHARED_DATA)USER_SHARED_DATA_BASE)->DosDeviceMap);
}
-WINBOOL
-STDCALL
+WINBOOL STDCALL
GetDiskFreeSpaceA (
LPCSTR lpRootPathName,
LPDWORD lpSectorsPerCluster,
}
-WINBOOL
-STDCALL
+WINBOOL STDCALL
GetDiskFreeSpaceW(
LPCWSTR lpRootPathName,
LPDWORD lpSectorsPerCluster,
}
-WINBOOL
-STDCALL
+WINBOOL STDCALL
GetDiskFreeSpaceExA (
LPCSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailableToCaller,
}
-WINBOOL
-STDCALL
+WINBOOL STDCALL
GetDiskFreeSpaceExW(
LPCWSTR lpDirectoryName,
PULARGE_INTEGER lpFreeBytesAvailableToCaller,
}
-UINT
-STDCALL
-GetDriveTypeA (
- LPCSTR lpRootPathName
- )
+UINT STDCALL
+GetDriveTypeA(LPCSTR lpRootPathName)
{
UNICODE_STRING RootPathNameU;
ANSI_STRING RootPathName;
}
-UINT
-STDCALL
-GetDriveTypeW (
- LPCWSTR lpRootPathName
- )
+UINT STDCALL
+GetDriveTypeW(LPCWSTR lpRootPathName)
{
FILE_FS_DEVICE_INFORMATION FileFsDevice;
IO_STATUS_BLOCK IoStatusBlock;
}
-WINBOOL
-STDCALL
-GetVolumeInformationA (
+WINBOOL STDCALL
+GetVolumeInformationA(
LPCSTR lpRootPathName,
LPSTR lpVolumeNameBuffer,
DWORD nVolumeNameSize,
#define FS_ATTRIBUTE_BUFFER_SIZE (MAX_PATH + sizeof(FILE_FS_ATTRIBUTE_INFORMATION))
-WINBOOL
-STDCALL
+WINBOOL STDCALL
GetVolumeInformationW(
LPCWSTR lpRootPathName,
LPWSTR lpVolumeNameBuffer,
}
-WINBOOL
-STDCALL
-SetVolumeLabelW (
- LPCWSTR lpRootPathName,
- LPCWSTR lpVolumeName
- )
+WINBOOL STDCALL
+SetVolumeLabelW(LPCWSTR lpRootPathName,
+ LPCWSTR lpVolumeName)
{
+ PFILE_FS_LABEL_INFORMATION LabelInfo;
+ IO_STATUS_BLOCK IoStatusBlock;
+ ULONG LabelLength;
+ HANDLE hFile;
+ NTSTATUS Status;
+
+ LabelLength = wcslen(lpVolumeName) * sizeof(WCHAR);
+ LabelInfo = RtlAllocateHeap(RtlGetProcessHeap(),
+ 0,
+ sizeof(FILE_FS_LABEL_INFORMATION) +
+ LabelLength);
+ LabelInfo->VolumeLabelLength = LabelLength;
+ wcscpy(&LabelInfo->VolumeLabel,
+ lpVolumeName);
+
+ hFile = CreateFileW(lpRootPathName,
+ FILE_WRITE_ATTRIBUTES,
+ FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
+ DPRINT("hFile: %x\n", hFile);
+
+ Status = NtSetVolumeInformationFile(hFile,
+ &IoStatusBlock,
+ LabelInfo,
+ sizeof(FILE_FS_LABEL_INFORMATION) +
+ LabelLength,
+ FileFsLabelInformation);
+
+ RtlFreeHeap(RtlGetProcessHeap(),
+ 0,
+ LabelInfo);
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT("Status: %x\n", Status);
+ CloseHandle(hFile);
+ SetLastErrorByStatus(Status);
return FALSE;
+ }
+
+ CloseHandle(hFile);
+ return TRUE;
}
/* EOF */