📄 ioctl.c
字号:
}
BOOL TestIOCTL2(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1, (TEXT("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Arrived TestIOCTL2 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\r\n")));
return TRUE;
}
BOOL TestIOCTL3(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1, (TEXT("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Arrived TestIOCTL3 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\r\n")));
return TRUE;
}
BOOL TestIOCTL4(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1, (TEXT("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Arrived TestIOCTL 4$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\r\n")));
return TRUE;
}
BOOL TestIOCTL5(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1, (TEXT("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Arrived TestIOCTL5 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\r\n")));
return TRUE;
}
BOOL TestIOCTL6(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1, (TEXT("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Arrived TestIOCTL6 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\r\n")));
return TRUE;
}
BOOL TestIOCTL7(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
RETAILMSG(1, (TEXT("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Arrived TestIOCTL7 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\r\n")));
return TRUE;
}
const OAL_IOCTL_HANDLER g_oalIoCtlTable[] = {
{ IOCTL_EDBG_DEREGISTER_CLIENT , 0, TestIOCTLa },
{ IOCTL_EDBG_GET_OUTPUT_DEBUG_FN, 0, TestIOCTLb },
{ IOCTL_EDBG_IS_STARTED, 0, TestIOCTLc },
{ IOCTL_EDBG_RECV, 0, TestIOCTLd },
{ IOCTL_EDBG_REGISTER_CLIENT , 0, TestIOCTLe },
{ IOCTL_EDBG_REGISTER_DFLT_CLIENT, 0, TestIOCTLf },
{ IOCTL_EDBG_SEND, 0, TestIOCTLg },
{ IOCTL_EDBG_SET_DEBUG, 0, TestIOCTLh },
{ IOCTL_HAL_DISABLE_WAKE, 0, OALIoCtlHalDisableWake },
{ IOCTL_HAL_ENABLE_WAKE, 0, OALIoCtlHalEnableWake },
{ IOCTL_HAL_PRESUSPEND, 0, OALIoCtlHalPresuspend },
{ IOCTL_HAL_GET_WAKE_SOURCE, 0, OALIoCtlHalGetWakeSource},
{ IOCTL_HAL_AUTHENTICATE_DEVICE, 0, TestIOCTLi },
{ IOCTL_HAL_DDK_CALL, 0, OALIoCtlHalDdkCall },
{ IOCTL_HAL_GETREGSECUREKEYS, 0, SecureRegistry },
{ IOCTL_HAL_GET_BIN_CHAIN, 0, TestIOCTLj },
{ IOCTL_HAL_GET_BOOTLOADER_PARAMS, 0, TestIOCTLk },
{ IOCTL_HAL_GET_CACHE_INFO, 0, OALIoCtlHalGetCacheInfo },
{ IOCTL_HAL_GET_DEVICEID, 0, OALIoCtlHalGetDeviceId },
{ IOCTL_HAL_GET_DEVICE_INFO, 0, OALIoCtlHalGetDeviceInfo },
{ IOCTL_HAL_GET_HIVE_CLEAN_FLAG, 0, TestIOCTLl },
{ IOCTL_HAL_GET_HIVE_RAM_REGION, 0, TestIOCTLm },
{ IOCTL_HAL_GET_HWENTROPY, 0, TestIOCTLn },
{ IOCTL_HAL_GET_IMAGE_SIGNED_STATE, 0, TestIOCTLo },
{ IOCTL_HAL_GET_IP_ADDR, 0, TestIOCTLp },
{ IOCTL_HAL_GET_POWERONREASON, 0, TestIOCTLq },
{ IOCTL_HAL_GET_RANDOM_SEED, 0, GetRandomSeed },
{ IOCTL_HAL_GET_RIO_INFO, 0, TestIOCTLr },
{ IOCTL_HAL_GET_UUID, 0, OALIoCtlHalGetUUID },
{ IOCTL_HAL_ILTIMING, 0, TestIOCTLs },
{ IOCTL_HAL_INITREGISTRY, 0, OALIoCtlHalInitRegistry },
{ IOCTL_HAL_OEM_PROFILER, 0, TestIOCTLt },
{ IOCTL_HAL_POSTINIT, 0, TestIOCTLu },
{ IOCTL_HAL_PROFILE, 0, TestIOCTLv },
{ IOCTL_HAL_QUERY_DEVICE_SETTINGS, 0, TestIOCTLw },
{ IOCTL_HAL_QUERY_DISPLAYSETTINGS, 0, S3C24A0IoCtlQueryDispSettings },
{ IOCTL_HAL_RADIO_CNTRL, 0, TestIOCTLx },
{ IOCTL_HAL_REBOOT, 0, OALIoCtlHalReboot },
{ IOCTL_HAL_RELEASE_SYSINTR, 0, OALIoCtlHalReleaseSysIntr},
{ IOCTL_HAL_REQUEST_IRQ, 0, OALIoCtlHalRequestIrq},
{ IOCTL_HAL_REQUEST_SYSINTR, 0, OALIoCtlHalRequestSysIntr },
{ IOCTL_HAL_SAVE_HIVE_RAM_REGION, 0, TestIOCTLy },
{ IOCTL_HAL_SET_DEVICE_INFO, 0, TestIOCTLz },
{ IOCTL_HAL_TRANSLATE_IRQ, 0, OALIoCtlHalRequestSysIntr },
{ IOCTL_HAL_WHQL_TEST_MODE, 0, TestIOCTL0 },
{ IOCTL_HAL_WRITE_XIP, 0, TestIOCTL1 },
{ IOCTL_HAL_XIPCHAIN, 0, TestIOCTL2 },
{ IOCTL_KITL_GET_INFO, 0, TestIOCTL3 },
{ IOCTL_PROCESSOR_INFORMATION, 0, OALIoCtlProcessorInfo },
{ IOCTL_PSL_NOTIFY, 0, TestIOCTL4 },
{ IOCTL_QUERY_PHYSICALMEM, 0, TestIOCTL5 },
{ IOCTL_SET_KERNEL_COMM_DEV, 0, TestIOCTL6 },
{ IOCTL_SET_KERNEL_DEV_PORT, 0, TestIOCTL7 },
{ IOCTL_HAL_INIT_RTC, 0, OALIoCtlHalInitRTC},
#ifdef IMGSHAREETH
// Standard VBRIDGE/ KITL Support
{ IOCTL_VBRIDGE_802_3_MULTICAST_LIST, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_ADD_MAC, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_CURRENT_PACKET_FILTER, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_GET_ETHERNET_MAC, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_GET_RX_PACKET, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_GET_RX_PACKET_COMPLETE, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_GET_TX_PACKET, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_GET_TX_PACKET_COMPLETE, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_SHARED_ETHERNET, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_WILD_CARD, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_WILD_CARD_RESET_BUFFER, 0, OALIoCtlVBridge },
{ IOCTL_VBRIDGE_WILD_CARD_VB_INITIALIZED, 0, OALIoCtlVBridge },
#endif
// Required Termination
{ 0, 0, NULL }
};
BOOL SecureRegistry(UINT32 code, VOID* lpInBuf , UINT32 nInBufSize , VOID* lpOutBuf ,
UINT32 nOutBufSize , UINT32 *lpBytesReturned )
{
RegSecureKey OEMSecNames[] = {
// Protect HKEY_LOCAL_MACHINE\Name and all of its values/subkeys
{ REGSEC_HKLM, 4, L"Name" },
// Protect HKEY_LOCAL_MACHINE\OtherName and
// HKEY_CURRENT_USER\OtherName and all of their values/subkeys
{ REGSEC_HKLM | REGSEC_HKCU, 9, L"OtherName" },
};
RegSecureKeyList OEMSecList = {
sizeof(OEMSecNames) / sizeof(RegSecureKey),
OEMSecNames,
};
DWORD dwName;
RETAILMSG(1, (TEXT("In SecureRegistry&^$$&**\r\n")));
// First call: return the required buffer size
// lpInBuf unused, should be NULL
// nInBufSize unused, should be 0
// lpOutBuf pointer to a DWORD buffer size
// nOutBufSize sizeof(DWORD)
if (!lpInBuf && !nInBufSize && lpOutBuf && (nOutBufSize == sizeof(DWORD))) {
DWORD dwBufSize;
dwBufSize = sizeof(OEMSecList) + sizeof(OEMSecNames);
// size of structs without names
for (dwName = 0; dwName < OEMSecList.dwNumKeys; dwName++) {
dwBufSize += OEMSecNames[dwName].wLen * sizeof(WCHAR);
// no nulls
}
*((DWORD*)lpOutBuf) = dwBufSize;
return TRUE;
// Second call: fill the provided buffer
// lpInBuf unused, should be NULL
// nInBufSize unused, should be 0
// lpOutBuf pointer to the buffer to be filled
// nOutBufSize buffer size, should be the same as returned on first call
} else if (!lpInBuf && !nInBufSize && lpOutBuf
&& (nOutBufSize > sizeof(OEMSecList) + sizeof(OEMSecNames))) {
RegSecureKeyList *pKeys = (RegSecureKeyList*)lpOutBuf;
// pStr moves through the buffer as strings are written
LPBYTE pStr = (LPBYTE)lpOutBuf + sizeof(OEMSecList) + sizeof(OEMSecNames);
pKeys->dwNumKeys = OEMSecList.dwNumKeys;
pKeys->pList = (RegSecureKey*) ((LPBYTE)lpOutBuf + sizeof(OEMSecList));
for (dwName = 0; dwName < OEMSecList.dwNumKeys; dwName++) {
pKeys->pList[dwName].wRoots = OEMSecNames[dwName].wRoots;
pKeys->pList[dwName].wLen = OEMSecNames[dwName].wLen;
pKeys->pList[dwName].pName = (LPWSTR)pStr;
memcpy(pStr, (LPBYTE)OEMSecNames[dwName].pName,
OEMSecNames[dwName].wLen * sizeof(WCHAR));
pStr += OEMSecNames[dwName].wLen * sizeof(WCHAR);
}
return TRUE;
} else {
// Invalid args
DEBUGCHK(0);
return FALSE;
}
}
BOOL GetRandomSeed(UINT32 code, VOID* pInpBuffer, UINT32 inpSize, VOID* pOutBuffer,
UINT32 outSize, UINT32 *pOutSize)
{
static unsigned int temp = 0;
unsigned int dwBufSize;
RETAILMSG(1, (TEXT("In GetRandomSeed ****** %x\r\n"), (code >> 2)&0x0FFF));
dwBufSize = 0x453773 + temp++;
*(unsigned int *)pOutBuffer = dwBufSize;
outSize = sizeof(unsigned int);
return TRUE;
}
//------------------------------------------------------------------------------
BOOL S3C24A0IoCtlQueryDispSettings (
UINT32 code, VOID *lpInBuf, UINT32 nInBufSize, VOID *lpOutBuf,
UINT32 nOutBufSize, UINT32 *lpBytesReturned
) {
DWORD dwErr = 0;
RETAILMSG(1, (TEXT("In S3C24A0IoCtlQueryDispSettings^^^^^\r\n")));
if (lpBytesReturned) {
*lpBytesReturned = 0;
}
if (!lpOutBuf) {
dwErr = ERROR_INVALID_PARAMETER;
} else if (sizeof(DWORD)*3 > nOutBufSize) {
dwErr = ERROR_INSUFFICIENT_BUFFER;
} else {
// Check the boot arg structure for the default display settings.
__try {
((PDWORD)lpOutBuf)[0] = (DWORD)240;
((PDWORD)lpOutBuf)[1] = (DWORD)320;
((PDWORD)lpOutBuf)[2] = (DWORD)16;
if (lpBytesReturned) {
*lpBytesReturned = sizeof (DWORD) * 3;
}
} __except (EXCEPTION_EXECUTE_HANDLER) {
dwErr = ERROR_INVALID_PARAMETER;
}
}
if (dwErr) {
NKSetLastError (dwErr);
}
return !dwErr;
}
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -