Example #1
0
NTSTATUS
DokanSetBasicInformation(
	 PEVENT_CONTEXT		EventContext,
	 PDOKAN_FILE_INFO	FileInfo,
	 PDOKAN_OPERATIONS	DokanOperations)
{
	FILETIME creation, lastAccess, lastWrite;
	NTSTATUS status = STATUS_NOT_IMPLEMENTED;

	PFILE_BASIC_INFORMATION basicInfo =
		(PFILE_BASIC_INFORMATION)((PCHAR)EventContext + EventContext->Operation.SetFile.BufferOffset);

	if (!DokanOperations->SetFileAttributes)
		return STATUS_NOT_IMPLEMENTED;
	
	if (!DokanOperations->SetFileTime)
		return STATUS_NOT_IMPLEMENTED;

	status = DokanOperations->SetFileAttributes(
		EventContext->Operation.SetFile.FileName,
		basicInfo->FileAttributes,
		FileInfo);

	if (status > 0)
		return status;

	creation.dwLowDateTime = basicInfo->CreationTime.LowPart;
	creation.dwHighDateTime = basicInfo->CreationTime.HighPart;
	lastAccess.dwLowDateTime = basicInfo->LastAccessTime.LowPart;
	lastAccess.dwHighDateTime = basicInfo->LastAccessTime.HighPart;
	lastWrite.dwLowDateTime = basicInfo->LastWriteTime.LowPart;
	lastWrite.dwHighDateTime = basicInfo->LastWriteTime.HighPart;


	return DokanOperations->SetFileTime(
		EventContext->Operation.SetFile.FileName,
		&creation,
		&lastAccess,
		&lastWrite,
		FileInfo);
}