Операционная система Microsoft Windows 3.1 для программиста -том 3


Листинг 4.1. Файл isshare/isshare.cpp


// ===================================================== // Приложение определяет, загружена ли утилита MS-DOS // share.exe, и выводит соответствующее сообщение // =====================================================

#define STRICT #include <windows.h> #include <windowsx.h> #include <dos.h>

int ShareLoaded(void);

#pragma argsused int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { int rc;

// Проверяем, загружена ли share.exe rc = ShareLoaded();

if (!rc) { // Если код возврата равен -1, функция не смогла // создать на диске временный файл, необходимый // для выполнения проверки if(rc == -1) { MessageBox(NULL, "File creation error", "", MB_OK); }

// Если код возврата равен 0, share.exe не загружена else { MessageBox(NULL, "Share NOT loaded", "", MB_OK); } }

// Если код возврата равен 1, share.exe загружена else { MessageBox(NULL, "Share loaded", "SHARE Test", MB_OK); }

return 0; }

// ------------------------------------------------------- // Функция ShareLoaded // Проверяет, загружена ли утилита share.exe // -------------------------------------------------------

int ShareLoaded(void) { HFILE hfTempFile; OFSTRUCT ofs; char szBuf[144]; union REGS regs; int rc;

// Создаем временный файл на диске GetTempFileName(0, "tst", 0, szBuf); hfTempFile = _lcreat(szBuf, 0);

// Если файл создать не удалось, возвращаем -1 if (hfTempFile == HFILE_ERROR) { return(-1); }

// Пытаемся заблокировать первый байт созданного файла

regs.x.bx = hfTempFile; // идентификатор файла regs.h.ah = 0x5c; // код функции MS-DOS regs.h.al = 0; // код операции блокирования regs.x.cx = 0; // CX:DX - смещение в файле regs.x.dx = 0; regs.x.si = 0; // SI:DI - длина блокируемой области regs.x.di = 1;

// Вызываем функцию MS-DOS intdos(&regs, &regs);

// Если установлен флаг переноса, выполнение блокирования // невозможно. Считаем, что в этом случае // утилита share.exe не загружена if(regs.x.cflag == 1) { rc = 0; }




Начало  Назад  Вперед