⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cwin2fsfilepage.cpp

📁 一个windows 文件系统驱动源码
💻 CPP
字号:
 
 /*
  *     Copyright (C) Satish kumar Janarthanan (vsat_in@yahoo.com.), 2004-2005
  *
  *		Project:		Win2fs
  *
  *		Module Name:    \GUI\ShellExt\CWin2fsFilePage.cpp
  *
  *     Abstract:		The property page extension class.
  *
  *     Author:		    Satish Kumar J
  *
  *		Date:			20-NOV-2005
  *
  *		Notes:			None.
  *
  *		Revision History:
  *
  *		Date		Version	Author				Changes
  *		------------------------------------------------------------------------
  *
  *		20-NOV-05	1.00	Satish Kumar J		Initial	Version.
  *
  *
  */

 //////////////////////////////////////////////////////////////////////////////

 // Library includes.

 #include "stdafx.h"

 //////////////////////////////////////////////////////////////////////////////

 // Private includes.

 #include "CAboutDlg.h"
 #include "CWin2fsFilePage.h"

 #include "ioctls.h"
 #include "linux\ext2_fs.h"

 //////////////////////////////////////////////////////////////////////////////

 // Global data.

 BEGIN_MESSAGE_MAP(CWin2fsFilePage, CWin2fsPage)
 END_MESSAGE_MAP()

 #define IsBitSet(v,b)	(((b)&(v)) != 0)

 #ifndef __EXT2FS_H

	 #define S_IFMT   0x0F000            /*017 0000 */

	 #define S_IFSOCK 0x0C000            /*014 0000 */
	 #define S_IFLNK  0x0A000            /*012 0000 */
	 #define S_IFFIL  0x08000            /*010 0000 */
	 #define S_IFBLK  0x06000            /*006 0000 */
	 #define S_IFDIR  0x04000            /*004 0000 */
	 #define S_IFCHR  0x02000            /*002 0000 */
	 #define S_IFIFO  0x01000            /*001 0000 */

	 #define S_ISSOCK(m)     (((m) & S_IFMT) == S_IFSOCK)
	 #define S_ISLNK(m)      (((m) & S_IFMT) == S_IFLNK)
	 #define S_ISFIL(m)      (((m) & S_IFMT) == S_IFFIL)
	 #define S_ISBLK(m)      (((m) & S_IFMT) == S_IFBLK)
	 #define S_ISDIR(m)      (((m) & S_IFMT) == S_IFDIR)
	 #define S_ISCHR(m)      (((m) & S_IFMT) == S_IFCHR)
	 #define S_ISFIFO(m)     (((m) & S_IFMT) == S_IFIFO)
 
	 #define S_IPERMISSION_MASK 0x1FF 

	 #define S_IRWXU 0x01C0     /*  00700 */
	 #define S_IRUSR 0x0100     /*  00400 */
	 #define S_IWUSR 0x0080     /*  00200 */
	 #define S_IXUSR 0x0040     /*  00100 */

	 #define S_IRWXG 0x0038     /*  00070 */
	 #define S_IRGRP 0x0020     /*  00040 */
	 #define S_IWGRP 0x0010     /*  00020 */
	 #define S_IXGRP 0x0008     /*  00010 */
 
	 #define S_IRWXO 0x0007     /*  00007 */
	 #define S_IROTH 0x0004     /*  00004 */
	 #define S_IWOTH 0x0002     /*  00002 */
	 #define S_IXOTH 0x0001     /*  00001 */

 #endif		// __EXT2FS_H

 //////////////////////////////////////////////////////////////////////////////

 // Static data.

 // None.

 //////////////////////////////////////////////////////////////////////////////

 // Static functions.

 static CString GetType (__U16 mode)
 {
	 CString str = "Unknown";

	 if (S_ISSOCK(mode))
		 str = "Socket";
	 else if (S_ISLNK(mode))
		 str = "Link";
	 else if (S_ISFIL(mode))
		 str = "Regular file";
	 else if (S_ISBLK(mode))
		 str = "Block device";
	 else if (S_ISDIR(mode))
		 str = "Directory";
	 else if (S_ISCHR(mode))
		 str = "Char device";
	 else if (S_ISFIFO(mode))
		 str = "FIFO";

	 return str;
 }

 static CString FormatSize (__U32 size)
 {
	 CString str = "Unknown";

	 __U32	oneKB	= 1000;
	 __U32	oneMB	= (1000*oneKB);
	 __U32	oneGB	= (1000*oneMB);

	 if ((size/oneGB) > 0)
	 {
		 str.Format ("%-2.2f GB", (float) ((float)size/oneGB));
	 }
	 else if ((size/oneMB) > 0)
	 {
		 str.Format ("%-2.2f MB", (float) ((float)size/oneMB));
	 }
	 else
	 {
		 str.Format ("%u bytes", size);
	 }

	 return str;
 }

 //////////////////////////////////////////////////////////////////////////////

 // Restricted functions.

 // Privates'.

 // None.

 // Protected.

 VOID CWin2fsFilePage::CheckFilePerms (ext2_inode* pi)
 {
	 if (pi != NULL)
	 {
		 CheckDlgButton (IDC_CHECK_UREAD,	IsBitSet (pi->i_mode, S_IRUSR));
		 CheckDlgButton (IDC_CHECK_UWRITE,	IsBitSet (pi->i_mode, S_IWUSR));
		 CheckDlgButton (IDC_CHECK_UEXEC,	IsBitSet (pi->i_mode, S_IXUSR));
		 CheckDlgButton (IDC_CHECK_SUID,	IsBitSet (pi->i_mode, S_IRUSR));

		 CheckDlgButton (IDC_CHECK_GREAD,	IsBitSet (pi->i_mode, S_IRGRP));
		 CheckDlgButton (IDC_CHECK_GWRITE,	IsBitSet (pi->i_mode, S_IWGRP));
		 CheckDlgButton (IDC_CHECK_GEXEC,	IsBitSet (pi->i_mode, S_IXGRP));
		 CheckDlgButton (IDC_CHECK_SGID,	IsBitSet (pi->i_mode, S_IRUSR));

		 CheckDlgButton (IDC_CHECK_OREAD,	IsBitSet (pi->i_mode, S_IROTH));
		 CheckDlgButton (IDC_CHECK_OWRITE,	IsBitSet (pi->i_mode, S_IWOTH));
		 CheckDlgButton (IDC_CHECK_OEXEC,	IsBitSet (pi->i_mode, S_IXOTH));
	 }
 }
 
 //////////////////////////////////////////////////////////////////////////////

 // Global functions.

 IMPLEMENT_DYNAMIC(CWin2fsFilePage, CWin2fsPage)

 CWin2fsFilePage::CWin2fsFilePage( const CString& strPath, BOOL bAutoDestroy ) 
			:CWin2fsPage( IDD_WIN2FS_FILEPAGE, strPath, bAutoDestroy )
 {
 }

 CWin2fsFilePage::~CWin2fsFilePage()
 {
 }

 BOOL CWin2fsFilePage::OnInitDialog() 
 {
	CWin2fsPage::OnInitDialog();

	LoadInode ();

	return TRUE;  // return TRUE unless you set the focus to a control
 }

 /////////////////////////////////////////////////////////////////////////////

 // Message handlers.

 // None.

 /////////////////////////////////////////////////////////////////////////////

 // Protected/private methods.

 BOOL CWin2fsFilePage::LoadInode ()
 {
	BOOL bRet = FALSE;

	ext2_inode* pi = NULL;

	do
	{
		pi = ReadInode ();

		BREAK_IF_NULL(pi);

		AddProperty ("Inode #",			pi->osd1.linux1.l_i_reserved1);
		AddProperty ("File type",		GetType (pi->i_mode));
		AddProperty ("Links count",		pi->i_links_count);
		AddProperty ("User ID",			((pi->osd2.linux2.l_i_uid_high<<16)| pi->i_uid));
		AddProperty ("Group ID",		((pi->osd2.linux2.l_i_gid_high<<16)| pi->i_gid));
		AddProperty ("Size",			FormatSize(pi->i_size));
		AddProperty ("Created",			ctime ((const long*)&pi->i_ctime));
		AddProperty ("Accessed",		ctime ((const long*)&pi->i_atime));
		AddProperty ("Modified",		ctime ((const long*)&pi->i_mtime));

		CheckFilePerms (pi);

	} while (FALSE);

	SAFE_DELETE (pi);

	return bRet;
 }

 /////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -