亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? interface.c

?? 一個Windows下的Linux專用虛擬機
?? C
字號:
/* * This source code is a part of coLinux source package. * * Dan Aloni <da-x@colinux.org>, 2003 (c) * * The code is licensed under the GPL. See the COPYING file at * the root directory. * */#include "ddk.h"#include "driver.h"#include <colinux/common/libc.h>#include <colinux/os/alloc.h>#include <colinux/kernel/manager.h>#include <colinux/os/current/monitor.h>#include <colinux/os/current/ioctl.h>#include "manager.h"static NTAPI void manager_irp_cancel(	PDEVICE_OBJECT DeviceObject,	PIRP Irp){	co_manager_t *manager = NULL;	co_manager_open_desc_t opened = NULL;	bool_t myIRP = PFALSE;	fixme_IoSetCancelRoutine(Irp, NULL);		manager = (co_manager_t *)DeviceObject->DeviceExtension;	if (manager) {		opened = (typeof(opened))(Irp->Tail.Overlay.DriverContext[0]);		if (opened) {			myIRP = opened->os->irp == Irp;			opened->os->irp = NULL;		}	}		Irp->IoStatus.Status = STATUS_CANCELLED;	Irp->IoStatus.Information = 0;		IoReleaseCancelSpinLock(Irp->CancelIrql);		IoCompleteRequest(Irp, IO_NO_INCREMENT);	if (myIRP) {		co_manager_close(manager, opened);	}}static NTSTATUS manager_read(co_manager_t *manager, co_manager_open_desc_t opened,			     PIRP Irp){	NTSTATUS ntStatus = STATUS_UNSUCCESSFUL;	co_rc_t rc;	char *buffer;	co_queue_t *queue;	if (!opened->active) {		ntStatus = STATUS_PIPE_BROKEN;		Irp->IoStatus.Status = ntStatus;		Irp->IoStatus.Information = 0;		IoCompleteRequest(Irp, IO_NO_INCREMENT);		return ntStatus;	}	buffer = Irp->AssociatedIrp.SystemBuffer;		co_os_mutex_acquire(opened->lock);	queue = &opened->out_queue;	if (co_queue_size(queue) != 0) {		unsigned char *io_buffer_start = Irp->AssociatedIrp.SystemBuffer;		unsigned char *io_buffer = io_buffer_start;		unsigned char *io_buffer_end = io_buffer + Irp->IoStatus.Information;			while (co_queue_size(queue) != 0)		{			co_message_queue_item_t *message_item;			rc = co_queue_peek_tail(queue, (void **)&message_item);			if (!CO_OK(rc))				return rc;					co_message_t *message = message_item->message;			unsigned long size = message->size + sizeof(*message);			if (io_buffer + size > io_buffer_end) {				break;			}					rc = co_queue_pop_tail(queue, (void **)&message_item);			if (!CO_OK(rc))				break;			co_queue_free(queue, message_item);			co_memcpy(io_buffer, message, size);			io_buffer += size;			co_os_free(message);		}		Irp->IoStatus.Information = io_buffer - io_buffer_start;		if (Irp->IoStatus.Information == 0)			Irp->IoStatus.Status = STATUS_BUFFER_OVERFLOW;		else			Irp->IoStatus.Status = ntStatus = STATUS_SUCCESS;		IoCompleteRequest(Irp, IO_NO_INCREMENT);	} else {		if (opened->os->irp) {			ntStatus = STATUS_INVALID_PARAMETER; /* TODO */			Irp->IoStatus.Status = ntStatus;			Irp->IoStatus.Information = 0;			IoCompleteRequest(Irp, IO_NO_INCREMENT);		} else {			KIRQL irql;			IoAcquireCancelSpinLock(&irql);						opened->ref_count++;			ntStatus = STATUS_PENDING;			Irp->IoStatus.Status = ntStatus;			Irp->Tail.Overlay.DriverContext[0] = opened;			fixme_IoSetCancelRoutine(Irp, manager_irp_cancel);			opened->os->irp = Irp;			IoMarkIrpPending(Irp);						IoReleaseCancelSpinLock(irql);		}	}	co_os_mutex_release(opened->lock);	return ntStatus;}static NTSTATUS manager_write(co_manager_t *manager, co_manager_open_desc_t opened, PIRP Irp){	NTSTATUS ntStatus = STATUS_UNSUCCESSFUL;	if (!opened->active) {		ntStatus = STATUS_PIPE_BROKEN;		Irp->IoStatus.Status = ntStatus;		Irp->IoStatus.Information = 0;		IoCompleteRequest(Irp, IO_NO_INCREMENT);		return ntStatus;	}	if (opened->monitor) {		char *buffer;		unsigned long size;		co_message_t *message;		unsigned long message_size;		long size_left;		long position;				buffer = Irp->AssociatedIrp.SystemBuffer;		size = Irp->IoStatus.Information;		size_left = size;		position = 0;		while (size_left > 0) {			message = (typeof(message))(&buffer[position]);			message_size = message->size + sizeof(*message);			size_left -= message_size;			if (size_left >= 0) {				if (message->from == CO_MODULE_CONET0)					co_debug_lvl(network, 14, "message written (sent): %p", message);				co_monitor_message_from_user(opened->monitor, opened, message);			}			position += message_size;		}				ntStatus = STATUS_SUCCESS;	} else {		Irp->IoStatus.Information = 0;	}	Irp->IoStatus.Status = ntStatus;	IoCompleteRequest(Irp, IO_NO_INCREMENT);	return ntStatus;}static NTSTATUS manager_dispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp){	PIO_STACK_LOCATION  irpStack;	PVOID               ioBuffer;	ULONG               inputBufferLength;	ULONG               outputBufferLength;	ULONG               ioControlCode;	NTSTATUS            ntStatus = STATUS_SUCCESS;	co_manager_t        *manager;	co_rc_t             rc;	co_manager_ioctl_t  ioctl;	co_manager_open_desc_t opened = NULL;	Irp->IoStatus.Status = ntStatus;	Irp->IoStatus.Information = 0;	irpStack = IoGetCurrentIrpStackLocation(Irp);	manager = (co_manager_t *)DeviceObject->DeviceExtension;	if (!manager) {		ntStatus = STATUS_NO_SUCH_DEVICE;		goto complete;	}	opened = (typeof(opened))(irpStack->FileObject->FsContext);	if (!opened) {		switch (irpStack->MajorFunction) {		case IRP_MJ_CREATE: {			rc = co_manager_open(manager, &opened);			if (!CO_OK(rc)) {				ntStatus = STATUS_INVALID_PARAMETER; /* TODO */				goto complete;			}			irpStack->FileObject->FsContext = opened;			break;		}		case IRP_MJ_CLOSE:		case IRP_MJ_CLEANUP: 			break;		default:			ntStatus = STATUS_NO_SUCH_DEVICE;			goto complete;		}	}	ioBuffer           = Irp->AssociatedIrp.SystemBuffer;	inputBufferLength  = irpStack->Parameters.DeviceIoControl.InputBufferLength;	outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;	switch (irpStack->MajorFunction) {	case IRP_MJ_CLOSE:	case IRP_MJ_CLEANUP: 		if (opened) {			irpStack->FileObject->FsContext = NULL;			co_manager_open_desc_deactive_and_close(manager, opened);		}		break;	case IRP_MJ_READ: {		Irp->IoStatus.Information = irpStack->Parameters.Read.Length;		if (Irp->MdlAddress == NULL) {			ntStatus = STATUS_INVALID_PARAMETER;			Irp->IoStatus.Information = 0;			goto complete;		}		Irp->AssociatedIrp.SystemBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);		if (Irp->AssociatedIrp.SystemBuffer == NULL) {			ntStatus = STATUS_INSUFFICIENT_RESOURCES;			Irp->IoStatus.Information = 0;			goto complete;		}		ntStatus = manager_read(manager, opened, Irp);		return ntStatus;	}	case IRP_MJ_WRITE: {		Irp->IoStatus.Information = irpStack->Parameters.Write.Length;		if (Irp->MdlAddress == NULL) {			ntStatus = STATUS_INVALID_PARAMETER;			Irp->IoStatus.Information = 0;			goto complete;		}		Irp->AssociatedIrp.SystemBuffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);		if (Irp->AssociatedIrp.SystemBuffer == NULL) {			ntStatus = STATUS_INSUFFICIENT_RESOURCES;			Irp->IoStatus.Information = 0;			goto complete;		}		ntStatus = manager_write(manager, opened, Irp);		return ntStatus;	}    	case IRP_MJ_DEVICE_CONTROL: {		ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;		if (CO_GET_IOCTL_TYPE(ioControlCode) != CO_DRIVER_TYPE) {			ntStatus = STATUS_INVALID_PARAMETER; 			break;		}		if (CO_GET_IOCTL_MTYPE(ioControlCode) != METHOD_BUFFERED) {			ntStatus = STATUS_INVALID_PARAMETER; 			break;		}		if (CO_GET_IOCTL_ACCESS(ioControlCode) != FILE_ANY_ACCESS) {			ntStatus = STATUS_INVALID_PARAMETER; 			break;		}		ioctl = (co_manager_ioctl_t)(CO_GET_IOCTL_METHOD(ioControlCode));		co_manager_ioctl(manager, ioctl, ioBuffer, 				 inputBufferLength,				 outputBufferLength,				 &Irp->IoStatus.Information,				 opened);		/* Intrinsic Success / Failure indictation is returned per ioctl. */		ntStatus = STATUS_SUCCESS;		break;	}	}complete:	Irp->IoStatus.Status = ntStatus;	IoCompleteRequest(Irp, IO_NO_INCREMENT);	return ntStatus;}static NTSTATUS NTAPIdispatch_wrapper(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp){	return manager_dispatch(DeviceObject, Irp);}staticVOID NTAPIdriver_unload(IN PDRIVER_OBJECT DriverObject){	WCHAR               deviceLinkBuffer[]  = L"\\DosDevices\\"CO_DRIVER_NAME;	UNICODE_STRING      deviceLinkUnicodeString;	co_manager_t        *manager;	manager = DriverObject->DeviceObject->DeviceExtension;	if (manager) {		co_manager_unload(manager);	}	RtlInitUnicodeString(&deviceLinkUnicodeString, deviceLinkBuffer);	IoDeleteSymbolicLink(&deviceLinkUnicodeString);	IoDeleteDevice(DriverObject->DeviceObject);}NTSTATUS NTAPIDriverEntry( 	IN PDRIVER_OBJECT  DriverObject,	IN PUNICODE_STRING  RegistryPath 	){	PDEVICE_OBJECT deviceObject = NULL;	NTSTATUS ntStatus;	WCHAR deviceNameBuffer[]  = L"\\Device\\" CO_DRIVER_NAME;	UNICODE_STRING deviceNameUnicodeString;	WCHAR deviceLinkBuffer[]  = L"\\DosDevices\\" CO_DRIVER_NAME;	UNICODE_STRING deviceLinkUnicodeString;	co_manager_t *manager;	co_rc_t rc;	RtlInitUnicodeString (&deviceNameUnicodeString, deviceNameBuffer);	ntStatus = IoCreateDevice (DriverObject,				   sizeof(co_manager_t),				   &deviceNameUnicodeString,				   CO_DRIVER_TYPE,				   0,				   FALSE,				   &deviceObject);	if (!NT_SUCCESS(ntStatus)) 		return ntStatus;	manager = (co_manager_t *)deviceObject->DeviceExtension;	manager->state = CO_MANAGER_STATE_NOT_INITIALIZED;	RtlInitUnicodeString (&deviceLinkUnicodeString, deviceLinkBuffer);	ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString,					 &deviceNameUnicodeString);	if (!NT_SUCCESS(ntStatus)) {		IoDeleteDevice (deviceObject);		return ntStatus;	}	deviceObject->Flags |= DO_DIRECT_IO;	DriverObject->MajorFunction[IRP_MJ_CREATE]         =	DriverObject->MajorFunction[IRP_MJ_CLOSE]          =	DriverObject->MajorFunction[IRP_MJ_CLEANUP]        =	DriverObject->MajorFunction[IRP_MJ_READ]           =	DriverObject->MajorFunction[IRP_MJ_WRITE]          =	DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = dispatch_wrapper;	DriverObject->DriverUnload                         = driver_unload;	rc = co_manager_load(manager);	return STATUS_SUCCESS;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香另类激情小说| 色乱码一区二区三区88| aaa欧美日韩| 久久这里只精品最新地址| 一区二区视频免费在线观看| 国内成人免费视频| 欧美另类高清zo欧美| 亚洲欧美中日韩| 国产在线播精品第三| 日韩一级成人av| 午夜精品久久久久久久久久久 | eeuss影院一区二区三区| 7777精品伊人久久久大香线蕉完整版| 日本一区二区电影| 国产伦精品一区二区三区免费| 欧美日韩国产首页在线观看| 中文字幕一区二区三区在线观看| 国内久久婷婷综合| 欧美一级电影网站| 日韩高清国产一区在线| 91国偷自产一区二区开放时间 | 婷婷成人激情在线网| 一本大道久久a久久精品综合| 国产精品三级久久久久三级| 国产一区二区三区免费在线观看| 在线成人av网站| 欧美aaaaa成人免费观看视频| 欧美日韩久久一区二区| 亚洲自拍偷拍综合| 欧美在线制服丝袜| 午夜精品久久久| 91精品欧美福利在线观看| 日韩国产高清影视| 日韩欧美一区中文| 国产美女视频一区| 国产欧美精品一区aⅴ影院| 国产成人自拍网| 国产精品国产自产拍高清av| av激情成人网| 亚洲亚洲精品在线观看| 欧美精品视频www在线观看| 日本va欧美va瓶| 精品电影一区二区| 成人性视频免费网站| 1000部国产精品成人观看| 91精彩视频在线观看| 日韩精品1区2区3区| 精品精品国产高清a毛片牛牛 | 奇米色一区二区三区四区| 日韩欧美国产电影| 国产精品影视天天线| 亚洲国产精品黑人久久久| 97se亚洲国产综合在线| 午夜精品爽啪视频| 国产亚洲欧美日韩日本| 99国产欧美另类久久久精品| 亚洲444eee在线观看| 精品久久久久久久人人人人传媒 | 国产精品久久久一本精品| 色婷婷精品久久二区二区蜜臂av| 亚洲成av人片www| 久久综合av免费| 成人一区二区三区中文字幕| 亚洲夂夂婷婷色拍ww47| 日韩午夜激情视频| 成人免费毛片高清视频| 亚洲国产精品视频| 国产婷婷精品av在线| 欧美偷拍一区二区| 高清不卡一区二区| 三级亚洲高清视频| 国产精品国模大尺度视频| 4438亚洲最大| 99re这里只有精品首页| 奇米精品一区二区三区在线观看一 | 精品福利二区三区| 欧美色图免费看| 丁香婷婷综合网| 日本sm残虐另类| 一区二区三区不卡视频在线观看| 精品国产乱码久久久久久久| 日本高清不卡aⅴ免费网站| 国产一区二区三区久久久| 午夜精品久久久| 亚洲精品视频免费观看| 久久久久久亚洲综合| 欧美日韩高清在线播放| 91丨九色丨黑人外教| 国内久久婷婷综合| 琪琪久久久久日韩精品| 亚洲综合一二区| 中文字幕在线观看不卡| 国产午夜精品一区二区三区嫩草| 欧美日本在线观看| 欧美亚洲国产一卡| 91天堂素人约啪| av中文一区二区三区| 国产九九视频一区二区三区| 麻豆91在线观看| 日韩av网站免费在线| 一区二区在线观看视频在线观看| 欧美激情一区二区三区| 久久亚洲精品国产精品紫薇| 日韩一区二区免费电影| 欧美巨大另类极品videosbest | 欧美中文字幕一区二区三区亚洲| eeuss国产一区二区三区| 国产91精品欧美| 国产乱色国产精品免费视频| 精品一区二区三区免费观看| 久久国产精品露脸对白| 强制捆绑调教一区二区| 另类欧美日韩国产在线| 老司机精品视频导航| 美女视频黄免费的久久 | 97超碰欧美中文字幕| 不卡的电视剧免费网站有什么| 国产成人精品亚洲日本在线桃色| 国产麻豆一精品一av一免费| 国产乱子伦视频一区二区三区| 国产麻豆91精品| aaa国产一区| 在线观看亚洲a| 这里只有精品免费| 久久女同精品一区二区| 久久久久99精品一区| 中文字幕免费不卡在线| 一区二区三区中文字幕精品精品 | 中文字幕的久久| 中文字幕在线播放不卡一区| 亚洲精品欧美综合四区| 偷窥国产亚洲免费视频| 美女被吸乳得到大胸91| 国产乱人伦偷精品视频不卡| 99久久久国产精品| 欧美日韩欧美一区二区| 欧美精品一区二区久久久| 中文在线一区二区| 一个色综合av| 国内成人免费视频| 色哟哟一区二区在线观看| 91精品久久久久久久99蜜桃| 精品电影一区二区三区| 亚洲三级在线看| 日韩av电影免费观看高清完整版| 国产黑丝在线一区二区三区| 色哟哟精品一区| 精品国产凹凸成av人网站| 中文字幕一区二区5566日韩| 午夜精品一区二区三区电影天堂| 国产乱理伦片在线观看夜一区 | 亚洲最新视频在线观看| 青娱乐精品视频| 97久久精品人人做人人爽 | 久久精品久久综合| 99久久久无码国产精品| 日韩午夜在线播放| 亚洲精品久久嫩草网站秘色| 狠狠色狠狠色合久久伊人| 色噜噜狠狠成人中文综合| 精品国产乱码久久久久久蜜臀| 亚洲精品国产精华液| 国产一区二区美女诱惑| 欧美三级中文字幕在线观看| 久久久国产精品午夜一区ai换脸| 亚洲制服丝袜av| av在线免费不卡| 精品国产乱码久久久久久久久| 亚洲成人激情自拍| 99国产精品久久久久久久久久 | 91精品国产一区二区三区香蕉| 中文字幕在线一区| 激情综合网天天干| 欧美日韩电影在线| 一级中文字幕一区二区| 99re热这里只有精品视频| 欧美极品另类videosde| 久久国产综合精品| 欧美一级欧美一级在线播放| 亚洲在线成人精品| 91网站在线观看视频| 国产精品久久久久久久久图文区| 国产精品888| 精品国产乱码久久久久久久| 日本vs亚洲vs韩国一区三区二区 | 久久久久国产一区二区三区四区| 亚洲成人免费av| 欧美日韩综合色| 亚洲影视在线播放| 欧美亚洲免费在线一区| 亚洲精选视频免费看| 91麻豆高清视频| 亚洲精品国产视频| 91成人网在线| 国内久久婷婷综合| 久久色视频免费观看| 极品美女销魂一区二区三区免费| 欧美mv日韩mv亚洲| 国产精品一区二区久激情瑜伽| 久久网站最新地址|