易截截图软件、单文件、免安装、纯绿色、仅160KB

C/C++底层实现指定磁盘只读

  C/C++底层实现指定磁盘只读 收藏
燕狂徒写的驱动挂钩,限制磁盘只读, 用于保证涉密计算机的稳定,相当于将磁盘变成ROM #include "ntddk.h"
#include
#include #define DRIVERNAME "OnlyRead(GongXiPeng!)"     // for use in messages typedef struct tagDEVICE_EXTENSION {
PDEVICE_OBJECT DeviceObject;   // device object this extension belongs to
PDEVICE_OBJECT LowerDeviceObject;  // next lower driver in same stack
PDEVICE_OBJECT Pdo;      // the PDO
IO_REMOVE_LOCK RemoveLock;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION; VOID RemoveDevice(IN PDEVICE_OBJECT fdo);
NTSTATUS CompleteRequest(IN PIRP Irp, IN NTSTATUS status, IN ULONG_PTR info);
NTSTATUS DispatchForSCSI(IN PDEVICE_OBJECT fido, IN PIRP Irp);
NTSTATUS AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT pdo); NTSTATUS DispatchAny(IN PDEVICE_OBJECT fido, IN PIRP Irp);
NTSTATUS DispatchPower(IN PDEVICE_OBJECT fido, IN PIRP Irp);
NTSTATUS DispatchPnp(IN PDEVICE_OBJECT fido, IN PIRP Irp);
NTSTATUS DispatchWmi(IN PDEVICE_OBJECT fido, IN PIRP Irp);
ULONG GetDeviceTypeToUse(PDEVICE_OBJECT pdo);
NTSTATUS StartDeviceCompletionRoutine(PDEVICE_OBJECT fido, PIRP Irp, PDEVICE_EXTENSION pdx);
NTSTATUS UsageNotificationCompletionRoutine(PDEVICE_OBJECT fido, PIRP Irp, PDEVICE_EXTENSION pdx); VOID DriverUnload(IN PDRIVER_OBJECT fido); NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
{
int i;
KdPrint(("准备驱动加载"));
UNREFERENCED_PARAMETER(RegistryPath);
DriverObject->DriverUnload = DriverUnload;
DriverObject->DriverExtension->AddDevice = AddDevice;
for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; ++i)
  DriverObject->MajorFunction[i] = DispatchAny;
DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;


相关文档:

c和c++的微妙的不同

在c++中存在,在c语言中却不存在的限制有:
1. 完整的函数原型声明是必须的,c语言里没这么严格.
2. c++中,由typedef定义的名字不能与已有的结构标签冲突,但是c语言中却是可以的.
3. 当void*指针赋值给另一个类型的指针时,c++规定必须进行强制类型转换,但是c语言中却不必要。
在c++和c中含义不一样的特性:
1. c++ ......

LINUX C 链表封装


main.c
//初始化队列
void InitQueue(LiQueue *q)
{
  q=(LiQueue*)malloc(sizeof(LiQueue));
    q->front=q->rear=NULL;
}
//判断是否为空
int QueueEmpty(LiQueue *q)
{
 if(q->rear==NULL)
 {
  return 1;
 }
 else
 {
  ......

C/C++中空指针与0与NULL和其他若干问题小结

什么是空指针常量(null pointer constant)?
[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
这里告诉我们:0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 等都是空 ......

DS计划C深入学习项目:【总结】【变量】变量的存储域


如果要加入此计划:
1、
方式1
:加入
QQ
群:
93684322

2、
方式2
:加入
CSDN
群组:
DS计划
。 
1.1 变量存储域
1.1.1 一个示例
pang123hui首先提供了一个网上流传的学习代码示例:
int a = 0; //全局区 
void main() 
{
int b; //栈 
char s[] = “abc” ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号