📄 openfiles.cpp
字号:
// OpenFiles.cpp (Windows 95/98 Only!)
//
// This example will show you how you can retrieve the information
// about what files are currently open on your Windows 95/98 system.
// The information includes the path, the way the file has been opened
// and the access and share modes.
//
// (c)1999 Ashot Oganesyan K, SmartLine, Inc
// mailto:ashot@aha.ru, http://www.protect-me.com, http://www.codepile.com
#include <windows.h>
#include <stdio.h>
typedef struct _DIOC_REGISTERS {
DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DIOC_REGISTERS, *PDIOC_REGISTERS;
#if !defined VWIN32_DIOC_DOS_IOCTL
#define VWIN32_DIOC_DOS_IOCTL 0x0001
#endif
// Intel x86 processor status flags
#define CARRY_FLAG 0x0001
// Access modes
#define OPEN_ACCESS_READONLY 0x0000
#define OPEN_ACCESS_WRITEONLY 0x0001
#define OPEN_ACCESS_READWRITE 0x0002
#define OPEN_ACCESS_RO_NOMODLASTACCESS 0x0004
// Share modes
#define OPEN_SHARE_COMPATIBLE 0x0000
#define OPEN_SHARE_DENYREADWRITE 0x0010
#define OPEN_SHARE_DENYWRITE 0x0020
#define OPEN_SHARE_DENYREAD 0x0030
#define OPEN_SHARE_DENYNONE 0x0040
// Open flags
#define OPEN_FLAGS_NOINHERIT 0x0080
#define OPEN_FLAGS_NO_BUFFERING 0x0100
#define OPEN_FLAGS_NO_COMPRESS 0x0200
#define OPEN_FLAGS_ALIAS_HINT 0x0400
#define OPEN_FLAGS_NOCRITERR 0x2000
#define OPEN_FLAGS_COMMIT 0x4000
// File types
#define FILENORMAL 0x0000
#define MEMORYMAPPED 0x0001
#define DLLOREXECUTABLE 0x0002
#define SWAPFILE 0x0004
// Opens a handle to VWIN32 that can be used to issue low-level commands
HANDLE WINAPI OpenVWin32 (void);
// Closes the handle opened by OpenVWin32
BOOL WINAPI CloseVWin32 (HANDLE hVWin32);
void main(void)
{
HANDLE hVWin32 = OpenVWin32();
if (hVWin32 == INVALID_HANDLE_VALUE)
return;
DWORD Dev = GetLogicalDrives();
DIOC_REGISTERS regs;
int i;
char buf[MAX_PATH];
BOOL fResult;
DWORD cb;
for (register int k=0; k<26; ++k)
{
if (Dev & 0x01)
{
i=0;
while (TRUE)
{
ZeroMemory(®s,sizeof(regs));
regs.reg_EBX = k+1; // Drive ID (0-Default drive,A-1,B-2,C-3,...)
regs.reg_EDX = (DWORD)buf; // File name
regs.reg_ECX = 0x486D; // Enumerate Open Files
regs.reg_EAX = 0x440D; // IOCTL for block devices
regs.reg_EDI = 0x0000; // 0-enum all,1-unmovable files only
regs.reg_ESI = i++; // Zero-based file ID
fResult = DeviceIoControl (hVWin32, VWIN32_DIOC_DOS_IOCTL,
®s, sizeof(regs), ®s, sizeof(regs),
&cb, 0);
if (!fResult || regs.reg_Flags & CARRY_FLAG)
break;
printf("%s\t",buf);
switch(LOWORD(regs.reg_ECX))
{
case FILENORMAL:
printf("Normal\t");
break;
case MEMORYMAPPED:
printf("Memory Mapped\t");
break;
case DLLOREXECUTABLE:
printf("DLL or Executable\t");
break;
case SWAPFILE:
printf("Swap File\t");
break;
default:
printf("Unknown\t");
break;
}
if (LOWORD(regs.reg_EAX) & OPEN_ACCESS_RO_NOMODLASTACCESS)
printf("NOMODALASTACCESS\t");
else
if (LOWORD(regs.reg_EAX) & OPEN_ACCESS_READWRITE)
printf("READWRITE\t");
else
if (LOWORD(regs.reg_EAX) & OPEN_ACCESS_WRITEONLY)
printf("WRITEONLY\t");
else
printf("READONLY\t");
if (LOWORD(regs.reg_EAX) & OPEN_SHARE_DENYNONE)
printf("DENYNONE\t");
else
if (LOWORD(regs.reg_EAX) & OPEN_SHARE_DENYWRITE)
printf("DENYWRITE\t");
else
if (LOWORD(regs.reg_EAX) & OPEN_SHARE_DENYREAD)
printf("DENYREAD\t");
else
if (LOWORD(regs.reg_EAX) & OPEN_SHARE_DENYREADWRITE)
printf("DENYREADWRITE\t");
else
printf("COMPATIBLE\t");
if (LOWORD(regs.reg_EAX) & OPEN_FLAGS_COMMIT)
printf("COMMIT\n");
else
if (LOWORD(regs.reg_EAX) & OPEN_FLAGS_NOCRITERR)
printf("NOCRITERR\n");
else
if (LOWORD(regs.reg_EAX) & OPEN_FLAGS_ALIAS_HINT)
printf("ALIASHINT\n");
else
if (LOWORD(regs.reg_EAX) & OPEN_FLAGS_NO_COMPRESS)
printf("NOCOMPRESS\n");
else
if (LOWORD(regs.reg_EAX) & OPEN_FLAGS_NO_BUFFERING)
printf("NOBUFFER\n");
else
if (LOWORD(regs.reg_EAX) & OPEN_FLAGS_NOINHERIT)
printf("NOINHERIT\n");
else
printf("\n");
}
}
Dev = Dev >> 1;
}
CloseVWin32(hVWin32);
}
HANDLE WINAPI OpenVWin32 (void)
{
return CreateFile (TEXT("\\\\.\\vwin32"), 0, 0, NULL, 0,
FILE_FLAG_DELETE_ON_CLOSE, NULL);
}
BOOL WINAPI CloseVWin32 (HANDLE hVWin32)
{
return CloseHandle (hVWin32);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -