⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwr.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

/*++

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:

    Drv.c   Power Controller Driver

Abstract:

   Streams interface driver (MDD)

Functions:

Notes:

--*/

#include <windows.h>
#include <winreg.h>
#include <winioctl.h>
#include <ceddk.h>
#include <devload.h>

#include <types.h>
#include <excpt.h>
#include <tchar.h>
#include <cardserv.h>
#include <cardapi.h>
#include <tuple.h>
#include <diskio.h>
#include <nkintr.h>
#include <windev.h>
#include <winbase.h>

#include "pwr.h"

BOOL PWR_PowerUp(PVOID Context);

BOOL PWR_PowerDown(PVOID Context);


BOOL DllEntry(	HINSTANCE   hinstDll,             /*@parm Instance pointer. */
								DWORD   dwReason,                 /*@parm Reason routine is called. */
								LPVOID  lpReserved)               /*@parm system parameter. */
{
    if ( dwReason == DLL_PROCESS_ATTACH ) 
    {
        DEBUGREGISTER(hinstDll);
        RETAILMSG (1, (TEXT("PWR: Process Attach\r\n")));
    }

    if ( dwReason == DLL_PROCESS_DETACH ) 
    {
        RETAILMSG (1, (TEXT("PWR: Process Detach\r\n")));
    }

    return(TRUE);
}


BOOL PWR_Deinit(PPWR_CONTEXT pPWR)
{
    RETAILMSG(1, (TEXT(">PWR_Deinit\r\n")));

    if (!pPWR)
        return FALSE;
        
    HW_Deinit(pPWR);

    LocalFree(pPWR);

    RETAILMSG(1, (TEXT("<PWR_Deinit\r\n")));

    return TRUE;
}


/*++

Called by Device Manager to initialize the streams interface in response to ActivateDevice.
We passed ActivateDevice a pointer to our device context, but must read it out of the registry as "ClientInfo".

Returns context used in XXX_Open, XXX_PowerDown, XXX_PowerUp, and XXX_Deinit

--*/
PPWR_CONTEXT PWR_Init(PVOID Context)
{
	LPTSTR ActivePath = (LPTSTR)Context; // HKLM\Drivers\Active\xx
	PPWR_CONTEXT pPWR;
	BOOL bRc = FALSE;

	RETAILMSG(1, (TEXT(">PWR_Init(%p)\r\n"), ActivePath));

	// Allocate for our main data structure and one of it's fields.
	pPWR = (PPWR_CONTEXT)LocalAlloc( LPTR, sizeof(PWR_CONTEXT) );
	if ( !pPWR )
		return( NULL );

	pPWR->Sig = PCF_SIG;

	// init h/w
	if ( ERROR_SUCCESS != HW_Init(pPWR) )
		goto ALLOCFAILED;

	pPWR->Dx = D0;

	RETAILMSG(1, (TEXT("<PWR_Init:0x%x\r\n"), pPWR ));

	return (pPWR);

ALLOCFAILED:
	PWR_Deinit(pPWR);

	return NULL;
}


PPWR_CONTEXT PWR_Open(	PPWR_CONTEXT pPWR,       // context returned by PWR_Init.
   											DWORD        AccessCode, // @parm access code
   											DWORD        ShareMode)  // @parm share mode
{
    UNREFERENCED_PARAMETER(ShareMode);
    UNREFERENCED_PARAMETER(AccessCode);

    RETAILMSG(1,(TEXT(">PWR_Open(0x%x, 0x%x, 0x%x)\r\n"),pPWR, AccessCode, ShareMode));

    pPWR->OpenCount++;

    HW_Open(pPWR);

    RETAILMSG(1,(TEXT("<PWR_Open:%u\r\n"), pPWR->OpenCount ));

    return pPWR;
}


BOOL PWR_Close(PPWR_CONTEXT pPWR)
{
   RETAILMSG(1,(TEXT("PWR_Close(0x%x)\r\n"),pPWR));

    if ( pPWR->OpenCount ) 
    {        
        pPWR->OpenCount--;
        HW_Close(pPWR);
    }

    return TRUE;
}


ULONG PWR_Write(PPWR_CONTEXT pPWR,PUCHAR pBuffer,ULONG  BufferLength)
{
    return 0;
}


ULONG PWR_Read(PPWR_CONTEXT pPWR,PUCHAR pBuffer,ULONG  BufferLength)
{
   return 0;
}


BOOL PWR_IOControl(	PPWR_CONTEXT pPWR,
										DWORD dwCode,
										PBYTE pBufIn,
										DWORD dwLenIn,
										PBYTE pBufOut,
										DWORD dwLenOut,
										PDWORD pdwActualOut)
{
    DWORD dwErr = ERROR_SUCCESS;
    BOOL bRc = TRUE;

   // RETAILMSG(1,(TEXT(">PWR_IOControl(0x%x, 0x%x, %d, 0x%x)\r\n"),
   //     								dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut ));

    if ( !pPWR->OpenCount ) 
    {
        RETAILMSG (1,(TEXT(" COM_IOControl - device was closed\r\n")));
        SetLastError (ERROR_INVALID_HANDLE);
        return(FALSE);
    }


    bRc  = HW_IOControl(pPWR, dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut);

    if ( !bRc ) 
    {
        RETAILMSG (1, (TEXT("PWR_IOControl ERROR: %u\r\n"), dwErr));
        SetLastError(dwErr);
    }

    //RETAILMSG(1,(TEXT("<PWR_IOControl:%d\r\n"), bRc));

    return bRc;
}

ULONG PWR_Seek(PVOID Context,LONG Position,  DWORD Type)
{
    UNREFERENCED_PARAMETER(Context);
    UNREFERENCED_PARAMETER(Position);
    UNREFERENCED_PARAMETER(Type);
    RETAILMSG( 1, (TEXT("PWR_Seek\r\n")));
    return (ULONG)-1;
}

BOOL PWR_PowerUp(PVOID Context)
{
    return HW_PowerUp(Context);
}

BOOL PWR_PowerDown(PVOID Context)
{
    return HW_PowerDown(Context);
}

// EOF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -