コード例 #1
0
ファイル: filter.c プロジェクト: Cecildt/peerblock
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING registrypath)
{
	UNICODE_STRING devicename;
	PDEVICE_OBJECT device=NULL;
	NTSTATUS status;

	DbgPrint("pbfilter:  > Entering DriverEntry()\n");

	DbgPrint("pbfilter:    setting up devicename\n");
	RtlInitUnicodeString(&devicename, NT_DEVICE_NAME);

	DbgPrint("pbfilter:    creating device\n");
	status=IoCreateDevice(driver, sizeof(PBINTERNAL), &devicename, FILE_DEVICE_PEERBLOCK, 0, FALSE, &device);

	if(NT_SUCCESS(status))
	{
		UNICODE_STRING devicelink;

		DbgPrint("pbfilter:    created device, initting internal data\n");

		DbgPrint("pbfilter:    ... creating symbolic link\n");
		RtlInitUnicodeString(&devicelink, DOS_DEVICE_NAME);
		status=IoCreateSymbolicLink(&devicelink, &devicename);

		DbgPrint("pbfilter:    ... setting up irp-handling functions\n");
		driver->MajorFunction[IRP_MJ_CREATE]=
			driver->MajorFunction[IRP_MJ_CLOSE]=drv_create;
		driver->MajorFunction[IRP_MJ_CLEANUP]=drv_cleanup;
		driver->MajorFunction[IRP_MJ_DEVICE_CONTROL]=drv_control;
		driver->DriverUnload=drv_unload;
		device->Flags|=DO_BUFFERED_IO;

		DbgPrint("pbfilter:    ... setting up device extension\n");
		g_internal=device->DeviceExtension;

		DbgPrint("pbfilter:    ... initializing lock and queue\n");
		KeInitializeSpinLock(&g_internal->rangeslock);
		KeInitializeSpinLock(&g_internal->destinationportslock);
		KeInitializeSpinLock(&g_internal->sourceportslock);
		InitNotificationQueue(&g_internal->queue);

		DbgPrint("pbfilter:    ... resetting counters\n");
		g_internal->blockedcount = 0;
		g_internal->allowedcount = 0;
		g_internal->destinationportcount = 0;
		g_internal->sourceportcount = 0;

		DbgPrint("pbfilter:    internal data initted\n");
	}

	if(!NT_SUCCESS(status))
	{
		DbgPrint("pbfilter:  * ERROR: couldn't create device, status:[0x%lX] . . . unloading\n", status);
		drv_unload(driver);
	}

	DbgPrint("pbfilter:  < Leaving DriverEntry(), status:[0x%lX]\n", status);

	return status;
}
コード例 #2
0
ファイル: drv.c プロジェクト: avagin/linux
static int stm_drm_platform_remove(struct platform_device *pdev)
{
	struct drm_device *ddev = platform_get_drvdata(pdev);

	DRM_DEBUG("%s\n", __func__);

	drm_dev_unregister(ddev);
	drv_unload(ddev);
	drm_dev_put(ddev);

	return 0;
}