Работа с некоторыми Win API функциями (информация о системе)

Узнать стоимость написания работы

В этой статьеи будет рассмотрены некоторые Win API функции:

1) GetLogicalDrives

Функция GetLogicalDrives возвращает число-битовую маску в которой храняться все

доступные диски.

DWORD GetLogicalDrives(VOID);

Параметры:

Эта функция не имеет параметров.

Возвращаемое значение:

Если функция вызвана правильно, то она возвращает число-битовую маску в которой

храняться все доступные диски ( если 0 бит равен 1, то диск "A:" присутствует, и т.д. )

Если функция вызвана не правильно, то она возвращает 0.

Пример:

int n;

char dd[4];

DWORD dr = GetLogicalDrives();

for( int i = 0; i < 26; i++ )

{

n = ((dr>>i)&0x00000001);

if( n == 1 )

{

dd[0] = char(65+i); dd[1] = ':'; dd[2] = ''; dd[3] = 0;

cout << "Available disk drives : " << dd << endl;

}

}

2) GetDriveType

Функция GetDriveType возвращает тип диска (removable, fixed, CD-ROM,

RAM disk, или network drive).

UINT GetDriveType(LPCTSTR lpRootPathName);

Параметры:

lpRootPathName

[in] Указатель на не нулевую стоку в которой хранится имя

главной директории на диске. Обратный слэш должен присутствовать!

Если lpRootPathName равно NULL, то функция использует текущую директорию.

Возвращаемое значение:

Функция возвращает тип диска. Могут быть следующие значения:

Значение Описание

DRIVE_UNKNOWN Не известный тип.

DRIVE_NO_ROOT_DIR Не правильный путь.

DRIVE_REMOVABLE Съёмный диск.

DRIVE_FIXED Фиксированный диск.

DRIVE_REMOTE Удалённый или network диск.

DRIVE_CDROM CD-ROM диск.

DRIVE_RAMDISK RAM диск.

Пример:

int d;

d = GetDriveType( "c:" );

if( d == DRIVE_UNKNOWN ) cout << " UNKNOWN" << endl;

if( d == DRIVE_NO_ROOT_DIR ) cout << " DRIVE NO ROOT DIR" << endl;

if( d == DRIVE_REMOVABLE ) cout << " REMOVABLE" << endl;

if( d == DRIVE_FIXED ) cout << " FIXED" << endl;

if( d == DRIVE_REMOTE ) cout << " REMOTE" << endl;

if( d == DRIVE_CDROM ) cout << " CDROM" << endl;

if( d == DRIVE_RAMDISK ) cout << " RAMDISK" << endl;

3) GetVolumeInformation

Функция GetVolumeInformation возвращает информацию о файловой системе и

дисках( директориях ).

BOOL GetVolumeInformation(

LPCTSTR lpRootPathName, // имя диска(директории) [in]

LPTSTR lpVolumeNameBuffer, // название диска [out]

DWORD nVolumeNameSize, // длина буфера названия диска [in]

LPDWORD lpVolumeSerialNumber, // сериальный номер диска [out]

LPDWORD lpMaximumComponentLength, // максимальная длина фыйла [out]

LPDWORD lpFileSystemFlags, // опции файловой системы [out]

LPTSTR lpFileSystemNameBuffer, // имя файловой системы [out]

DWORD nFileSystemNameSize // длина буфера имени файл. сист. [in]

);

Возвращаемое значение:

Если функция вызвана правильно, то она возвращает не нулевое значение(TRUE).

Если функция вызвана не правильно, то она возвращает 0(FALSE).

Пример:

char VolumeNameBuffer[100];

char FileSystemNameBuffer[100];

unsigned long VolumeSerialNumber;

BOOL GetVolumeInformationFlag = GetVolumeInformationA(

"c:",

VolumeNameBuffer,

100,

&VolumeSerialNumber,

NULL, //&MaximumComponentLength,

NULL, //&FileSystemFlags,

FileSystemNameBuffer,

100

);

if(GetVolumeInformationFlag != 0)

{

cout << " Volume Name is " << VolumeNameBuffer << endl;

cout << " Volume Serial Number is " << VolumeSerialNumber << endl;

cout << " File System is " << FileSystemNameBuffer << endl;

}

else cout << " Not Present (GetVolumeInformation)" << endl;

4) GetDiskFreeSpaceEx

Функция GetDiskFreeSpaceEx выдаёт информацию о доступном месте на диске.

BOOL GetDiskFreeSpaceEx(

LPCTSTR lpDirectoryName, // имя диска(директории) [in]

PULARGE_INTEGER lpFreeBytesAvailable, // доступно для использования(байт) [out]

PULARGE_INTEGER lpTotalNumberOfBytes, // максимальный объём( в байтах ) [out]

PULARGE_INTEGER lpTotalNumberOfFreeBytes // свободно на диске( в байтах ) [out]

);

Возвращаемое значение:

Если функция вызвана правильно, то она возвращает не нулевое значение(TRUE).

Если функция вызвана не правильно, то она возвращает 0(FALSE).

Пример:

DWORD FreeBytesAvailable;

DWORD TotalNumberOfBytes;

DWORD TotalNumberOfFreeBytes;

BOOL GetDiskFreeSpaceFlag = GetDiskFreeSpaceEx(

"c:", // directory name

(PULARGE_INTEGER)&FreeBytesAvailable, // bytes available to caller

(PULARGE_INTEGER)&TotalNumberOfBytes, // bytes on disk

(PULARGE_INTEGER)&TotalNumberOfFreeBytes // free bytes on disk

);

if(GetDiskFreeSpaceFlag != 0)

{

cout << " Total Number Of Free Bytes = " << (unsigned long)TotalNumberOfFreeBytes

<< "( " << double(unsigned long(TotalNumberOfFreeBytes))/1024/1000

<< " Mb )" << endl;

cout << " Total Number Of Bytes = " << (unsigned long)TotalNumberOfBytes

<< "( " << double(unsigned long(TotalNumberOfBytes))/1024/1000

<< " Mb )" << endl;

}

else cout << " Not Present (GetDiskFreeSpace)" << endl;

5) GlobalMemoryStatus

Функция GlobalMemoryStatus возвращает информацию о используемой системой памяти.

VOID GlobalMemoryStatus(

LPMEMORYSTATUS lpBuffer // указатель на структуру MEMORYSTATUS

);

typedef struct _MEMORYSTATUS {

DWORD dwLength; // длина структуры в байтах

DWORD dwMemoryLoad; // загрузка памяти в процентах

SIZE_T dwTotalPhys; // максимальное количество физической памяти в байтах

SIZE_T dwAvailPhys; // свободное количество физической памяти в байтах

SIZE_T dwTotalPageFile; // макс. кол. памяти для программ в байтах

SIZE_T dwAvailPageFile; // свободное кол. памяти для программ в байтах

SIZE_T dwTotalVirtual; // максимальное количество виртуальной памяти в байтах

SIZE_T dwAvailVirtual; // свободное количество виртуальной памяти в байтах

} MEMORYSTATUS, *LPMEMORYSTATUS;

Возвращаемое значение:

Эта функция не возвращает параметров

Пример:

// The MemoryStatus structure is 32 bytes long.

// It should be 32.

// 78 percent of memory is in use.

// There are 65076 total Kbytes of physical memory.

// There are 13756 free Kbytes of physical memory.

// There are 150960 total Kbytes of paging file.

// There are 87816 free Kbytes of paging file.

// There are 1fff80 total Kbytes of virtual memory.

// There are 1fe770 free Kbytes of virtual memory.

#define DIV 1024

#define WIDTH 7

char *divisor = "K";

MEMORYSTATUS stat;

GlobalMemoryStatus (&stat);

printf ("The MemoryStatus structure is %ld bytes long.n",

stat.dwLength);

printf ("It should be %d.n", sizeof (stat));

printf ("%ld percent of memory is in use.n",

stat.dwMemoryLoad);

printf ("There are %*ld total %sbytes of physical memory.n",

WIDTH, stat.dwTotalPhys/DIV, divisor);

printf ("There are %*ld free %sbytes of physical memory.n",

WIDTH, stat.dwAvailPhys/DIV, divisor);

printf ("There are %*ld total %sbytes of paging file.n",

WIDTH, stat.dwTotalPageFile/DIV, divisor);

printf ("There are %*ld free %sbytes of paging file.n",

WIDTH, stat.dwAvailPageFile/DIV, divisor);

printf ("There are %*lx total %sbytes of virtual memory.n",

WIDTH, stat.dwTotalVirtual/DIV, divisor);

printf ("There are %*lx free %sbytes of virtual memory.n",

WIDTH, stat.dwAvailVirtual/DIV, divisor);

6) GetComputerName, GetUserNameA

Функция GetComputerName возвращает NetBIOS имя локального компьютера.

BOOL GetComputerName(

LPTSTR lpBuffer, // имя локального компьютера( длина буфера равна MAX_COMPUTERNAME_LENGTH + 1 ) [out]

LPDWORD lpnSize // размер буфера ( лучше поставить MAX_COMPUTERNAME_LENGTH + 1 ) [out/in]

);

Функция GetUserName возвращает имя текущего узера.

BOOL GetUserName(

LPTSTR lpBuffer, // имя юзера( длина буфера равна UNLEN + 1 ) [out]

LPDWORD nSize // размер буфера ( лучше поставить UNLEN + 1 ) [out/in]

);

Возвращаемые значения:

Если функции вызваны правильно, то они возвращают не нулевое значение(TRUE).

Если функции вызваны не правильно, то они возвращают 0(FALSE).

Пример:

char ComputerName[MAX_COMPUTERNAME_LENGTH + 1];

unsigned long len_ComputerName = MAX_COMPUTERNAME_LENGTH + 1;

char UserName[UNLEN + 1];

unsigned long len_UserName = UNLEN + 1;

BOOL comp = GetComputerName(

ComputerName,

&len_ComputerName

);

if( comp != 0 ) { cout << "Computer Name is " << ComputerName << endl; }

else cout << "Computer Name is NOT FOUND !!! " << endl;

comp = GetUserNameA (

UserName,

&len_UserName

);

if( comp != 0 ) { cout << "User Name is " << UserName << endl; }

else cout << "User Name is NOT FOUND !!! " << endl;

7) GetSystemDirectory, GetTempPath, GetWindowsDirectory, GetCurrentDirectory

Функция GetSystemDirectory возвращает путь к системной директории.

UINT GetSystemDirectory(

LPTSTR lpBuffer, // буфер для системной директории [out]

UINT uSize // размер буфера [in]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Функция GetTempPath возвращает путь к директории, отведённой для временных файлов.

DWORD GetTempPath(

DWORD nBufferLength, // размер буфера [in]

LPTSTR lpBuffer // буфер для временной директории [out]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Функция GetWindowsDirectory возвращает путь к Windows директории.

UINT GetWindowsDirectory(

LPTSTR lpBuffer, // буфер для Windows директории [out]

UINT uSize // размер буфера [in]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Функция GetCurrentDirectory возвращает путь к текущей директории.

DWORD GetCurrentDirectory(

DWORD nBufferLength, // размер буфера [in]

LPTSTR lpBuffer // буфер для текущей директории [out]

);

Возвращаемое значение:

Эта функция возвращает размер буфера для системной директории не включая нулевого

значения в конце, если она вызвана правильно.

Если функция вызвана не правильно, то она возвращает 0.

Пример:

char path[100];

GetSystemDirectory( path, 100 );

cout << "System Directory is " << path << endl;

GetTempPath( 100, path );

cout << "Temp path is " << path << endl;

GetWindowsDirectory( path, 100 );

cout << "Windows directory is " << path << endl;

GetCurrentDirectory( 100, path );

cout << "Current directory is " << path << e

Другие материалы

  • Файловая система
  • ... в Windows API. Одна из самых существенных, с точки зрения разработчика, особенностей — использование длинных имен файлов. Так для имени файла и расширения система отводит 255 символов. Это значит, что использование каких–либо буферов фиксированного размера для хранения полных имен файлов недопустимо ...

  • Автоматизация системы бюджетирования финансовой службы
  • ... Консультационной группы "Воронов и Максимов". Статья о проблемах выбора системы бюджетирования - в проекте "УПРАВЛЕНИЕ 3000". Бюджетный автомат Если вы решитесь на автоматизацию системы бюджетирования компании, перед вами сразу встанут вопросы: что выбрать, сколько платить ...

  • Позиционные системы счисления
  • ... времени оставалась практически идентична —MSDOS. IBM PC—DOS 7.0 (1995 г.) обладает более широким набором сервисных программ, чем MS—DOS 6.22. Операционная система Novell DOS 7.0 (бывшая DR-DOS фирмы Digital Research) обладала существенно более широкими возможностями, чем MS—DOS. В 1994 году фирма ...

  • Операционный система Windows ХР
  • ... быстродействию для приложений, разработанных с расчетом на больший объем системной памяти. Кроме того, одной из целей разработки операционной системы Windows XP 64-Bit Edition было использование преимуществ процессора Itanium в области вычислений, содержащих переменные с плавающей точкой. Благодаря ...

  • Исследование возможностей операционной системы Windows
  • ... конце 2008 года она занимала почти 70% рынка операционных систем. Для Windows XP было выпущено три пакета обновлений (Service Pack), последний из которых вышел в апреле 2008 года. Каждый из пакетов расширял возможности операционной системы, устранял ошибки, делал систему более надежной и защищенной ...

  • Операционная система, программное обеспечение ПК
  • ... для настройки операционной системы для работы с пользователями, программными продуктами и устройствами. В реестре хранятся данные, которые необходимы для правильного функционирования Windows. К ним относятся профили всех пользователей, сведения об установленном программном обеспечении и типах ...

  • Способы защиты операционной системы от вирусных программ
  • ... в штатном режиме работы; нештатный режим (аварийные ситуации). Глава 2. Обоснование способов защиты операционной системы от программных закладок типа троянский конь 2.1 Общие сведения о троянских программах   Подсоединение локальных компьютерных сетей организаций к сети Internet ...

  • Анализ системы безопасности Microsoft Windows 2000 Advanced Server и стратегий ее использования
  • ... 3. Анализ безопасности Windows 2000 Advanced Server. 3.1. Теория Безопасности   Когда Windows NT впервые появилась в 1993 г., под безопасностью подразумевались меры предохранения важной информации на серве­ре от просмотра не имеющими на то прав пользователями и, возмож­но, использование ...

  • Работа с библиотеками динамической компоновки (DLL)
  • ... MAKEINTRESOURCE(1)); После завершения работы с библиотекой динамической компоновки, ее можно выгрузить из памяти процесса с помощью функции ::FreeLibrary:  ::FreeLibrary(hMyDll); Загрузка MFC-расширений динамических библиотек При загрузке MFC-расширений для DLL (подробно о которых рассказывается ...

  • Операционные системы
  • ... редактор, а также форматер текста и компилятор языка Си, что позволяет, по мере надобности, модифицировать "оболочку". От UNIX многие другие операционные системы переняли такие функции, как переназначение, канал и фильтр; однако UNIX имеет несомненно преимущество в том, что она с самого ...

  • Особенности операционной системы Windows 95
  • ... на ее базе больших программ. Совместимость с DOS-приложениями. Однако, работа с Windows не означает отказа от программ DOS (скорее она означает отказ от DOS в глобальном масштабе). На сегодняшний момент операционная система Windows фирмы Microsoft во всех ее проявлениях бесспорно считается самой ...

  • Карманные ПК, Операционная система PalmOS
  • ... обычного человека. КПК Palm становятся самыми популярными за всю историю карманных ПК, К 1999 году продается 1 миллион Palm'ов. многие компании принимают решение создавать свои КПК на базе PalmOS. Сама по себе операционная система PalmOS была сделана таким образом что для пользователя она ...

  • Обеспечение безопасности системы и защита данных в Windows 2003
  • ... , которые находятся за пределами сети интранет. Windows Server 2003 облегчает обеспечение безопасного доступа к сети предприятия для отдельных лиц и других предприятий, которым необходимо работать с данными или использовать ресурсы. Возможность Описание Интеграция с системой Passport ...

Каталог учебных материалов

Свежие работы в разделе

Наша кнопка

Разместить ссылку на наш сайт можно воспользовавшись следующим кодом:

Контакты

Если у вас возникли какие либо вопросы, обращайтесь на email администратора: admin@kazreferat.info