Sync with trunk (r48545)

svn path=/branches/reactos-yarotows/; revision=48547
This commit is contained in:
Jérôme Gardou
2010-08-14 15:15:44 +00:00
183 changed files with 12457 additions and 8838 deletions
+19 -27
View File
@@ -38,7 +38,6 @@ HWND hApplicationPageSwitchToButton; /* Application Switch To button
HWND hApplicationPageNewTaskButton; /* Application New Task button */
static int nApplicationPageWidth;
static int nApplicationPageHeight;
static HANDLE hApplicationPageEvent = NULL; /* When this event becomes signaled then we refresh the app list */
static BOOL bSortAscending = TRUE;
DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter);
BOOL noApps;
@@ -51,6 +50,11 @@ void ApplicationPageShowContextMenu2(void);
int CALLBACK ApplicationPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
int ProcGetIndexByProcessId(DWORD dwProcessId);
#ifdef RUN_APPS_PAGE
static HANDLE hApplicationThread = NULL;
static DWORD dwApplicationThread;
#endif
#if 0
void SwitchToThisWindow (
HWND hWnd, /* Handle to the window that should be activated */
@@ -92,7 +96,6 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
LV_COLUMN column;
WCHAR szTemp[256];
int cx, cy;
HANDLE hRefreshThread = NULL;
switch (message) {
case WM_INITDIALOG:
@@ -132,15 +135,16 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
UpdateApplicationListControlViewSetting();
/* Start our refresh thread */
hRefreshThread = CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, NULL);
#ifdef RUN_APPS_PAGE
hApplicationThread = CreateThread(NULL, 0, ApplicationPageRefreshThread, NULL, 0, &dwApplicationThread);
#endif
return TRUE;
case WM_DESTROY:
/* Close the event handle, this will make the */
/* refresh thread exit when the wait fails */
CloseHandle(hApplicationPageEvent);
CloseHandle(hRefreshThread);
/* Close refresh thread */
#ifdef RUN_APPS_PAGE
EndLocalThread(&hApplicationThread, dwApplicationThread);
#endif
break;
case WM_COMMAND:
@@ -213,9 +217,11 @@ ApplicationPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
void RefreshApplicationPage(void)
{
#ifdef RUN_APPS_PAGE
/* Signal the event so that our refresh thread */
/* will wake up and refresh the application page */
SetEvent(hApplicationPageEvent);
PostThreadMessage(dwApplicationThread, WM_TIMER, 0, 0);
#endif
}
void UpdateApplicationListControlViewSetting(void)
@@ -236,6 +242,7 @@ void UpdateApplicationListControlViewSetting(void)
DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter)
{
MSG msg;
INT i;
BOOL bItemRemoved = FALSE;
LV_ITEM item;
@@ -243,30 +250,15 @@ DWORD WINAPI ApplicationPageRefreshThread(void *lpParameter)
HIMAGELIST hImageListLarge;
HIMAGELIST hImageListSmall;
/* Create the event */
hApplicationPageEvent = CreateEventW(NULL, TRUE, TRUE, NULL);
/* If we couldn't create the event then exit the thread */
if (!hApplicationPageEvent)
return 0;
while (1)
{
DWORD dwWaitVal;
/* Wait on the event */
dwWaitVal = WaitForSingleObject(hApplicationPageEvent, INFINITE);
/* If the wait failed then the event object must have been */
/* closed and the task manager is exiting so exit this thread */
if (dwWaitVal == WAIT_FAILED)
/* Wait for an the event or application close */
if (GetMessage(&msg, NULL, 0, 0) <= 0)
return 0;
if (dwWaitVal == WAIT_OBJECT_0)
if (msg.message == WM_TIMER)
{
/* Reset our event */
ResetEvent(hApplicationPageEvent);
/*
* FIXME:
*
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* debug.cpp
* debug.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <[email protected]>
* 2005 Klemens Friedl <[email protected]>
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* endproc.cpp
* endproc.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <[email protected]>
* 2005 Klemens Friedl <[email protected]>
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* graph.cpp
* graph.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <[email protected]>
*
+2 -2
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* GraphCtrl.cpp
* graphctl.c
*
* Copyright (C) 2002 Robert Dickenson <[email protected]>
*
@@ -425,7 +425,7 @@ void GraphCtrl_DrawPoint(TGraphCtrl* this)
* note: the m_dcPlot covers the entire client
* but we only shift bitmap that is the size
* of the plot rectangle
* grab the right side of the plot (exluding m_nShiftPixels on the left)
* grab the right side of the plot (excluding m_nShiftPixels on the left)
* move this grabbed bitmap to the left by m_nShiftPixels
*/
BitBlt(this->m_dcPlot, this->m_rectPlot.left, this->m_rectPlot.top+1,
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* GraphCtrl.h
* graphctl.h
*
* Copyright (C) 2002 Robert Dickenson <[email protected]>
*
+2 -2
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* optnmenu.cpp
* optnmenu.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <[email protected]>
*
@@ -110,7 +110,7 @@ void TaskManager_OnOptionsShow16BitTasks(void)
/*
* FIXME: Currently this is useless because the
* current implemetation doesn't list the 16-bit
* current implementation doesn't list the 16-bit
* processes. I believe that would require querying
* each ntvdm.exe process for it's children.
*/
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* perfdata.cpp
* perfdata.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <[email protected]>
*
+16 -30
View File
@@ -51,11 +51,14 @@ HWND hPerformancePageTotalsHandleCountEdit; /* Total Handles Edit Con
HWND hPerformancePageTotalsProcessCountEdit; /* Total Processes Edit Control */
HWND hPerformancePageTotalsThreadCountEdit; /* Total Threads Edit Control */
#ifdef RUN_PERF_PAGE
static HANDLE hPerformanceThread = NULL;
static DWORD dwPerformanceThread;
#endif
static int nPerformancePageWidth;
static int nPerformancePageHeight;
static int lastX, lastY;
static HANDLE hPerformancePageEvent = NULL; /* When this event becomes signaled then we refresh the performance page */
DWORD WINAPI PerformancePageRefreshThread(void *lpParameter);
void AdjustFrameSize(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference, int pos)
@@ -94,12 +97,12 @@ void AdjustFrameSize(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference,
InvalidateRect(hCntrl, NULL, TRUE);
}
void AdjustControlPostion(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference)
static void AdjustControlPostion(HWND hCntrl, HWND hDlg, int nXDifference, int nYDifference)
{
AdjustFrameSize(hCntrl, hDlg, nXDifference, nYDifference, 0);
}
void AdjustCntrlPos(int ctrl_id, HWND hDlg, int nXDifference, int nYDifference)
static void AdjustCntrlPos(int ctrl_id, HWND hDlg, int nXDifference, int nYDifference)
{
AdjustFrameSize(GetDlgItem(hDlg, ctrl_id), hDlg, nXDifference, nYDifference, 0);
}
@@ -110,9 +113,6 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
RECT rc;
int nXDifference;
int nYDifference;
#ifdef RUN_PERF_PAGE
HANDLE hRefreshThread = NULL;
#endif
/* HDC hdc; */
/* PAINTSTRUCT ps; */
@@ -121,7 +121,7 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
GraphCtrl_Dispose(&PerformancePageCpuUsageHistoryGraph);
GraphCtrl_Dispose(&PerformancePageMemUsageHistoryGraph);
#ifdef RUN_PERF_PAGE
CloseHandle(hRefreshThread);
EndLocalThread(&hPerformanceThread, dwPerformanceThread);
#endif
break;
@@ -192,7 +192,7 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
GraphCtrl_SetPlotColor(&PerformancePageMemUsageHistoryGraph, 0, RGB(255, 255, 0)) ;
/* Start our refresh thread */
#ifdef RUN_PERF_PAGE
hRefreshThread = CreateThread(NULL, 0, PerformancePageRefreshThread, NULL, 0, NULL);
hPerformanceThread = CreateThread(NULL, 0, PerformancePageRefreshThread, NULL, 0, &dwPerformanceThread);
#endif
/*
@@ -303,9 +303,11 @@ PerformancePageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
void RefreshPerformancePage(void)
{
#ifdef RUN_PERF_PAGE
/* Signal the event so that our refresh thread */
/* will wake up and refresh the performance page */
SetEvent(hPerformancePageEvent);
PostThreadMessage(dwPerformanceThread, WM_TIMER, 0, 0);
#endif
}
DWORD WINAPI PerformancePageRefreshThread(void *lpParameter)
@@ -332,35 +334,21 @@ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter)
WCHAR Text[260];
WCHAR szMemUsage[256];
/* Create the event */
hPerformancePageEvent = CreateEventW(NULL, TRUE, TRUE, NULL);
/* If we couldn't create the event then exit the thread */
if (!hPerformancePageEvent)
return 0;
MSG msg;
LoadStringW(hInst, IDS_STATUS_MEMUSAGE, szMemUsage, 256);
while (1)
{
DWORD dwWaitVal;
int nBarsUsed1;
int nBarsUsed2;
/* Wait on the event */
dwWaitVal = WaitForSingleObject(hPerformancePageEvent, INFINITE);
/* If the wait failed then the event object must have been */
/* closed and the task manager is exiting so exit this thread */
if (dwWaitVal == WAIT_FAILED)
/* Wait for an the event or application close */
if (GetMessage(&msg, NULL, 0, 0) <= 0)
return 0;
if (dwWaitVal == WAIT_OBJECT_0)
if (msg.message == WM_TIMER)
{
/* Reset our event */
ResetEvent(hPerformancePageEvent);
/*
* Update the commit charge info
*/
@@ -449,8 +437,6 @@ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter)
PhysicalMemoryAvailable = PerfDataGetPhysicalMemoryAvailableK();
nBarsUsed2 = PhysicalMemoryTotal ? ((PhysicalMemoryAvailable * 100) / PhysicalMemoryTotal) : 0;
GraphCtrl_AppendPoint(&PerformancePageCpuUsageHistoryGraph, CpuUsage, CpuKernelUsage, 0.0, 0.0);
GraphCtrl_AppendPoint(&PerformancePageMemUsageHistoryGraph, nBarsUsed1, nBarsUsed2, 0.0, 0.0);
/* PerformancePageMemUsageHistoryGraph.SetRange(0.0, 100.0, 10) ; */
@@ -458,7 +444,7 @@ DWORD WINAPI PerformancePageRefreshThread(void *lpParameter)
InvalidateRect(hPerformancePageCpuUsageHistoryGraph, NULL, FALSE);
}
}
return 0;
return 0;
}
void PerformancePage_OnViewShowKernelTimes(void)
+17 -30
View File
@@ -40,7 +40,10 @@ HWND hProcessPageShowAllProcessesButton;/* Process Show All Processes checkbox *
static int nProcessPageWidth;
static int nProcessPageHeight;
static HANDLE hProcessPageEvent = NULL; /* When this event becomes signaled then we refresh the process list */
#ifdef RUN_PROC_PAGE
static HANDLE hProcessThread = NULL;
static DWORD dwProcessThread;
#endif
int CALLBACK ProcessPageCompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
void AddProcess(ULONG Index);
@@ -104,7 +107,6 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
int nXDifference;
int nYDifference;
int cx, cy;
HANDLE hRefreshThread = NULL;
switch (message) {
case WM_INITDIALOG:
@@ -139,19 +141,19 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
*/
OldProcessListWndProc = (WNDPROC)(LONG_PTR) SetWindowLongPtrW(hProcessPageListCtrl, GWL_WNDPROC, (LONG_PTR)ProcessListWndProc);
#ifdef RUN_PROC_PAGE
/* Start our refresh thread */
hRefreshThread = CreateThread(NULL, 0, ProcessPageRefreshThread, NULL, 0, NULL);
hProcessThread = CreateThread(NULL, 0, ProcessPageRefreshThread, NULL, 0, &dwProcessThread);
#endif
return TRUE;
case WM_DESTROY:
/* Close the event handle, this will make the */
/* refresh thread exit when the wait fails */
CloseHandle(hProcessPageEvent);
CloseHandle(hRefreshThread);
#ifdef RUN_PROC_PAGE
EndLocalThread(&hProcessThread, dwProcessThread);
#endif
SaveColumnSettings();
break;
case WM_COMMAND:
@@ -194,11 +196,9 @@ ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
cy = rc.top + nYDifference;
SetWindowPos(hProcessPageShowAllProcessesButton, NULL, cx, cy, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER);
InvalidateRect(hProcessPageShowAllProcessesButton, NULL, TRUE);
break;
case WM_NOTIFY:
ProcessPageOnNotify(wParam, lParam);
break;
}
@@ -372,9 +372,11 @@ void ProcessPageShowContextMenu(DWORD dwProcessId)
void RefreshProcessPage(void)
{
#ifdef RUN_PROC_PAGE
/* Signal the event so that our refresh thread */
/* will wake up and refresh the process page */
SetEvent(hProcessPageEvent);
PostThreadMessage(dwProcessThread, WM_TIMER, 0, 0);
#endif
}
DWORD WINAPI ProcessPageRefreshThread(void *lpParameter)
@@ -382,34 +384,19 @@ DWORD WINAPI ProcessPageRefreshThread(void *lpParameter)
ULONG OldProcessorUsage = 0;
ULONG OldProcessCount = 0;
WCHAR szCpuUsage[256], szProcesses[256];
/* Create the event */
hProcessPageEvent = CreateEventW(NULL, TRUE, TRUE, NULL);
/* If we couldn't create the event then exit the thread */
if (!hProcessPageEvent)
return 0;
MSG msg;
LoadStringW(hInst, IDS_STATUS_CPUUSAGE, szCpuUsage, 256);
LoadStringW(hInst, IDS_STATUS_PROCESSES, szProcesses, 256);
while (1) {
DWORD dwWaitVal;
/* Wait on the event */
dwWaitVal = WaitForSingleObject(hProcessPageEvent, INFINITE);
/* If the wait failed then the event object must have been */
/* closed and the task manager is exiting so exit this thread */
if (dwWaitVal == WAIT_FAILED)
/* Wait for an the event or application close */
if (GetMessage(&msg, NULL, 0, 0) <= 0)
return 0;
if (dwWaitVal == WAIT_OBJECT_0) {
if (msg.message == WM_TIMER) {
WCHAR text[260];
/* Reset our event */
ResetEvent(hProcessPageEvent);
UpdateProcesses();
if (IsWindowVisible(hProcessPage))
+25 -6
View File
@@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* TaskMgr.c : Defines the entry point for the application.
* taskmgr.c : Defines the entry point for the application.
*
* Copyright (C) 1999 - 2001 Brian Palmer <[email protected]>
* 2005 Klemens Friedl <[email protected]>
@@ -856,11 +856,6 @@ void TaskManager_OnViewUpdateSpeed(DWORD dwSpeed)
SetUpdateSpeed(hMainWnd);
}
void TaskManager_OnViewRefresh(void)
{
PostMessageW(hMainWnd, WM_TIMER, 0, 0);
}
void TaskManager_OnTabWndSelChange(void)
{
int i;
@@ -1012,3 +1007,27 @@ LPWSTR GetLastErrorText(LPWSTR lpszBuf, DWORD dwSize)
}
return lpszBuf;
}
DWORD EndLocalThread(HANDLE *hThread, DWORD dwThread)
{
DWORD dwExitCodeThread = 0;
if (*hThread != NULL) {
PostThreadMessage(dwThread,WM_QUIT,0,0);
for (;;) {
MSG msg;
if (WAIT_OBJECT_0 == WaitForSingleObject(*hThread, 500))
break;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
GetExitCodeThread(*hThread, &dwExitCodeThread);
CloseHandle(*hThread);
*hThread = NULL;
}
return dwExitCodeThread;
}
+1 -1
View File
@@ -116,9 +116,9 @@ void TaskManager_OnEnterMenuLoop(HWND hWnd);
void TaskManager_OnExitMenuLoop(HWND hWnd);
void TaskManager_OnMenuSelect(HWND hWnd, UINT nItemID, UINT nFlags, HMENU hSysMenu);
void TaskManager_OnViewUpdateSpeed(DWORD);
void TaskManager_OnViewRefresh(void);
void TaskManager_OnTabWndSelChange(void);
LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
DWORD EndLocalThread(HANDLE *hThread, DWORD dwThread);
#ifdef __cplusplus
}
+1 -1
View File
@@ -415,7 +415,7 @@ WinMain(
/* Tell kernel that CurrentControlSet is good (needed
* to support Last good known configuration boot) */
NtInitializeRegistry(CM_BOOT_FLAG_ACCEPTED);
NtInitializeRegistry(CM_BOOT_FLAG_ACCEPTED | 1);
/* Message loop for the SAS window */
while (GetMessageW(&Msg, WLSession->SASWindow, 0, 0))
+10 -1
View File
@@ -209,7 +209,7 @@ DWORD WINAPI AdapterDiscoveryThread(LPVOID Context) {
PDHCP_ADAPTER Adapter = NULL;
HANDLE AdapterStateChangedEvent = (HANDLE)Context;
struct interface_info *ifi = NULL;
int i, AdapterCount = 0;
int i, AdapterCount = 0, Broadcast;
/* FIXME: Kill this thread when the service is stopped */
@@ -285,6 +285,15 @@ DWORD WINAPI AdapterDiscoveryThread(LPVOID Context) {
socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
if (DhcpSocket != INVALID_SOCKET) {
/* Allow broadcast on this socket */
Broadcast = 1;
setsockopt(DhcpSocket,
SOL_SOCKET,
SO_BROADCAST,
(const char *)&Broadcast,
sizeof(Broadcast));
Adapter->ListenAddr.sin_family = AF_INET;
Adapter->ListenAddr.sin_port = htons(LOCAL_PORT);
Adapter->BindStatus =
+10
View File
@@ -2291,6 +2291,7 @@ PIP_ADAPTER_ORDER_MAP WINAPI GetAdapterOrderMap(VOID)
*/
DWORD WINAPI GetAdaptersAddresses(ULONG Family,ULONG Flags,PVOID Reserved,PIP_ADAPTER_ADDRESSES pAdapterAddresses,PULONG pOutBufLen)
{
#if 0
InterfaceIndexTable *indexTable;
IFInfo ifInfo;
int i;
@@ -2477,6 +2478,15 @@ DWORD WINAPI GetAdaptersAddresses(ULONG Family,ULONG Flags,PVOID Reserved,PIP_AD
free(indexTable);
return NO_ERROR;
#else
if (!pOutBufLen) return ERROR_INVALID_PARAMETER;
if (!pAdapterAddresses || *pOutBufLen == 0)
return ERROR_BUFFER_OVERFLOW;
if (Reserved) return ERROR_INVALID_PARAMETER;
FIXME(":stub\n");
return ERROR_NO_DATA;
#endif
}
/*
+1 -1
View File
@@ -32,7 +32,7 @@
#include "wine/debug.h"
//#include "ntddndis.h"
#include "ddk/tdiinfo.h"
#include "tdiinfo.h"
#include "tcpioctl.h"
#include "tdilib.h"
+2 -3
View File
@@ -11,9 +11,8 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
/* FUNCTIONS ****************************************************************/
+3 -2
View File
@@ -13,9 +13,10 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
#define NDEBUG
#include <debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+2 -3
View File
@@ -10,9 +10,8 @@
*/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
/*
* @implemented
+3 -3
View File
@@ -13,9 +13,9 @@
/* INCLUDES ****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+3 -3
View File
@@ -15,9 +15,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
#define SYMLINK_FLAG_RELATIVE 1
+3 -3
View File
@@ -17,9 +17,9 @@
/* INCLUDES ******************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* GLOBAL VARIABLES **********************************************************/
+3 -3
View File
@@ -12,9 +12,9 @@
/* INCLUDES ****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <reactos/debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+2 -1
View File
@@ -9,7 +9,8 @@
/* INCLUDES *******************************************************************/
#include <k32.h>
#include <wine/debug.h>
#define NDEBUG
#include <debug.h>
/* FUNCTIONS ******************************************************************/
+3 -3
View File
@@ -16,9 +16,9 @@
/* INCLUDES ******************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
UNICODE_STRING DllDirectory = {0, 0, NULL};
+3 -3
View File
@@ -12,9 +12,9 @@
/* INCLUDES ******************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS *****************************************************************/
+3 -3
View File
@@ -13,9 +13,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* GLOBALS ******************************************************************/
+3 -3
View File
@@ -12,9 +12,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* TYPES ********************************************************************/
+3 -3
View File
@@ -12,9 +12,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+2 -3
View File
@@ -10,14 +10,13 @@
*/
#include <k32.h>
#include <wine/debug.h>
#define NDEBUG
#include <debug.h>
#define NANOS_TO_100NS(nanos) (((LONGLONG)(nanos)) / 100)
#define MICROS_TO_100NS(micros) (((LONGLONG)(micros)) * NANOS_TO_100NS(1000))
#define MILLIS_TO_100NS(milli) (((LONGLONG)(milli)) * MICROS_TO_100NS(1000))
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
/*
* @implemented
*/
+2 -3
View File
@@ -10,9 +10,8 @@
*/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
/*
* @implemented
+3 -3
View File
@@ -14,9 +14,9 @@
/* INCLUDES ****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+3 -3
View File
@@ -11,9 +11,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+3 -3
View File
@@ -17,9 +17,9 @@
#include <k32.h>
#include <malloc.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* GLOBALS *****************************************************************/
+3 -3
View File
@@ -10,9 +10,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
//#define USING_PROPER_NPFS_WAIT_SEMANTICS
+3 -3
View File
@@ -11,9 +11,9 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* GLOBALS ******************************************************************/
+3 -3
View File
@@ -12,9 +12,9 @@
/* INCLUDES ****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
/* FUNCTIONS ****************************************************************/
+2 -3
View File
@@ -12,9 +12,8 @@
/* INCLUDES *****************************************************************/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
/* FUNCTIONS ****************************************************************/
+3 -3
View File
@@ -20,9 +20,9 @@
*/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32file;
#define MAX_DOS_DRIVES 26
+24 -2
View File
@@ -1,5 +1,25 @@
#pragma once
//
// Kernel32 Filter IDs
//
#define kernel32file 200
#define kernel32ver 201
#define actctx 202
#define resource 203
#define kernel32session 204
#define TRACE(fmt, ...) TRACE__(gDebugChannel, fmt, ##__VA_ARGS__)
#define WARN(fmt, ...) WARN__(gDebugChannel, fmt, ##__VA_ARGS__)
#define FIXME(fmt, ...) WARN__(gDebugChannel, fmt,## __VA_ARGS__)
#define ERR(fmt, ...) ERR__(gDebugChannel, fmt, ##__VA_ARGS__)
#define debugstr_a
#define debugstr_w
#define wine_dbgstr_w
#define debugstr_guid
#include "wine/unicode.h"
#include "baseheap.h"
#define BINARY_UNKNOWN (0)
@@ -40,8 +60,9 @@
/* Undocumented CreateProcess flag */
#define STARTF_SHELLPRIVATE 0x400
#define SetLastErrorByStatus(__S__) \
((void)SetLastError(RtlNtStatusToDosError(__S__)))
#define SetLastErrorByStatus(x) RtlSetLastWin32ErrorAndNtStatusFromNtStatus((x))
#define GetLastError() NtCurrentTeb()->LastErrorValue
#define SetLastError(x) NtCurrentTeb()->LastErrorValue = (x)
typedef struct _CODEPAGE_ENTRY
{
@@ -100,6 +121,7 @@ DWORD FilenameU2A_FitOrFail(LPSTR DestA, INT destLen, PUNICODE_STRING SourceU);
#define HeapAlloc RtlAllocateHeap
#define HeapReAlloc RtlReAllocateHeap
#define HeapFree RtlFreeHeap
#define _lread (_readfun)_hread
POBJECT_ATTRIBUTES
WINAPI
File diff suppressed because it is too large Load Diff
+15 -16
View File
@@ -578,16 +578,16 @@
@ stdcall GetNativeSystemInfo(ptr)
;@ stdcall -arch=x86_64 GetNextUmsListItem
@ stdcall GetNextVDMCommand(long)
@ stdcall GetNlsSectionName(long long double str str double) ; missing in Win 7
@ stdcall GetNumaAvailableMemory(ptr double ptr) ; missing in Win 7
@ stdcall GetNumaAvailableMemoryNode(double ptr)
@ stdcall GetNlsSectionName(long long long str str long) ; missing in Win 7
@ stdcall GetNumaAvailableMemory(ptr long ptr) ; missing in Win 7
@ stdcall GetNumaAvailableMemoryNode(long ptr)
;@ stdcall GetNumaAvailableMemoryNodeEx ; Win 7
@ stdcall GetNumaHighestNodeNumber(ptr)
;@ stdcall GetNumaNodeNumberFromHandle ; Win 7
@ stdcall GetNumaNodeProcessorMask(double ptr)
@ stdcall GetNumaNodeProcessorMask(long ptr)
;@ stdcall GetNumaNodeProcessorMaskEx ; Win 7
@ stdcall GetNumaProcessorMap(ptr double ptr) ; missing in Win 7
@ stdcall GetNumaProcessorNode(double ptr)
@ stdcall GetNumaProcessorMap(ptr long ptr) ; missing in Win 7
@ stdcall GetNumaProcessorNode(long ptr)
;@ stdcall GetNumaProcessorNodeEx ; Win 7
;@ stdcall GetNumaProximityNode ; Win 7
;@ stdcall GetNumaProximityNodeEx ; Win 7
@@ -613,7 +613,7 @@
@ stdcall GetPrivateProfileStructW(wstr wstr ptr long wstr)
@ stdcall GetProcAddress(long str)
@ stdcall GetProcessAffinityMask(long ptr ptr)
@ stdcall GetProcessFlags(long)
//@ stdcall GetProcessFlags(long)
;@ stdcall GetProcessDEPPolicy ; Win 7
;@ stdcall GetProcessGroupAffinity ; Win 7
@ stdcall GetProcessHandleCount(long ptr)
@@ -630,7 +630,7 @@
@ stdcall GetProcessWorkingSetSize(long ptr ptr)
;@ stdcall GetProcessWorkingSetSizeEx ; Win 7
;@ stdcall GetProcessorSystemCycleTime ; Win 7
@ stdcall GetProductInfo(long long long long ptr)
;@ stdcall GetProductInfo(long long long long ptr) ; Win 7
@ stub GetProductName
@ stdcall GetProfileIntA(str str long)
@ stdcall GetProfileIntW(wstr wstr long)
@@ -681,7 +681,7 @@
@ stdcall GetTempPathA(long ptr)
@ stdcall GetTempPathW(long ptr)
@ stdcall GetThreadContext(long ptr)
@ stdcall GetThreadErrorMode()
;@ stdcall GetThreadErrorMode() ; Win 7
;@ stdcall GetThreadGroupAffinity ; Win 7
@ stdcall GetThreadIOPendingFlag(long ptr)
@ stdcall GetThreadId(ptr)
@@ -896,8 +896,7 @@
@ stdcall LockFile(long long long long long)
@ stdcall LockFileEx(long long long long long ptr)
@ stdcall LockResource(long)
@ stdcall MakeCriticalSectionGlobal(ptr)
;@ stdcall MakeCriticalSectionGlobal(ptr) // ???
@ stdcall MapUserPhysicalPages(ptr long ptr)
@ stdcall MapUserPhysicalPagesScatter(ptr long ptr)
@ stdcall MapViewOfFile(long long long long long)
@@ -920,7 +919,7 @@
@ stdcall NeedCurrentDirectoryForExePathA(str)
@ stdcall NeedCurrentDirectoryForExePathW(wstr)
;@ stdcall NlsCheckPolicy ; Win 7
@ stdcall NlsConvertIntegerToString(double double double wstr double) ; missing in Win 7
@ stdcall NlsConvertIntegerToString(long long long wstr long) ; missing in Win 7
;@ stdcall NlsEventDataDescCreate ; Win 7
@ stdcall NlsGetCacheUpdateCount()
@ stub NlsResetProcessLocale ; missing in XP SP3 and Win 7
@@ -1074,7 +1073,7 @@
@ stdcall RegisterWaitForSingleObjectEx(long ptr ptr long long)
@ stdcall RegisterWowBaseHandlers(long)
@ stdcall RegisterWowExec(long)
@ stdcall ReinitializeCriticalSection(ptr)
;@ stdcall ReinitializeCriticalSection(ptr) ; ???
@ stdcall ReleaseActCtx(ptr)
@ stdcall ReleaseMutex(long)
;@ stdcall ReleaseMutexWhenCallbackReturns ntdll.TpCallbackReleaseMutexOnCompletion ; Win 7
@@ -1218,7 +1217,7 @@
@ stdcall SetLocaleInfoA(long long str)
@ stdcall SetLocaleInfoW(long long wstr)
@ stdcall SetMailslotInfo(long long)
@ stdcall SetMessageWaitingIndicator(long double)
@ stdcall SetMessageWaitingIndicator(ptr long)
;@ stdcall SetNamedPipeAttribute ; Win 7
@ stdcall SetNamedPipeHandleState(long ptr ptr ptr)
@ stdcall SetPriorityClass(long long)
@@ -1242,7 +1241,7 @@
@ stdcall SetTermsrvAppInstallMode(long)
@ stdcall SetThreadAffinityMask(long long)
@ stdcall SetThreadContext(long ptr)
@ stdcall SetThreadErrorMode(long ptr)
;@ stdcall SetThreadErrorMode(long ptr) ; Win 7
@ stdcall SetThreadExecutionState(long)
;@ stdcall SetThreadGroupAffinity ; Win 7
@ stdcall SetThreadIdealProcessor(long long)
@@ -1313,7 +1312,7 @@
@ stdcall UTUnRegister(long)
;@ stdcall -arch=x86_64 UmsThreadYield
@ stdcall UnhandledExceptionFilter(ptr)
@ stdcall UninitializeCriticalSection(ptr)
;@ stdcall UninitializeCriticalSection(ptr) ; ???
@ stdcall UnlockFile(long long long long long)
@ stdcall UnlockFileEx(long long long long ptr)
@ stdcall UnmapViewOfFile(ptr)
-1
View File
@@ -6,7 +6,6 @@
<include base="kernel32" root="intermediate">.</include>
<include base="kernel32">include</include>
<include base="ReactOS">include/reactos/subsys</include>
<library>wine</library>
<library>pseh</library>
<library>normalize</library>
<library>ntdll</library>
+3 -4
View File
@@ -13,10 +13,9 @@
/* synched with wine 1.1.26 */
#include <k32.h>
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(actctx);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = actctx;
#define ACTCTX_FAKE_HANDLE ((HANDLE) 0xf00baa)
-14
View File
@@ -1371,20 +1371,6 @@ SetConsolePalette(DWORD Unknown0,
return FALSE;
}
/*
* @unimplemented (Undocumented)
*/
BOOL
WINAPI
SetLastConsoleEventActive(VOID)
{
DPRINT1("SetLastConsoleEventActive() UNIMPLEMENTED!\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/*
* @unimplemented (Undocumented)
*/
+3 -6
View File
@@ -20,12 +20,9 @@
*/
#include <k32.h>
#include "wine/unicode.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(resource);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = resource;
struct format_args
{
+9 -8
View File
@@ -30,12 +30,9 @@
*/
#include <k32.h>
#include "wine/config.h"
#include "wine/unicode.h"
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(nls);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = resource;
#define DATE_DATEVARSONLY 0x0100 /* only date stuff: yMdg */
#define TIME_TIMEVARSONLY 0x0200 /* only time stuff: hHmst */
@@ -1047,8 +1044,10 @@ INT WINAPI GetNumberFormatW(LCID lcid, DWORD dwFlags,
TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_w(lpszValue),
lpFormat, lpNumberStr, cchOut);
lcid = ConvertDefaultLocale(lcid);
if (!lpszValue || cchOut < 0 || (cchOut > 0 && !lpNumberStr) ||
!IsValidLocale(lcid, 0) ||
!IsValidLocale(lcid, LCID_INSTALLED) ||
(lpFormat && (dwFlags || !lpFormat->lpDecimalSep || !lpFormat->lpThousandSep)))
{
goto error;
@@ -1418,8 +1417,10 @@ INT WINAPI GetCurrencyFormatW(LCID lcid, DWORD dwFlags,
TRACE("(0x%04x,0x%08x,%s,%p,%p,%d)\n", lcid, dwFlags, debugstr_w(lpszValue),
lpFormat, lpCurrencyStr, cchOut);
lcid = ConvertDefaultLocale(lcid);
if (!lpszValue || cchOut < 0 || (cchOut > 0 && !lpCurrencyStr) ||
!IsValidLocale(lcid, 0) ||
!IsValidLocale(lcid, LCID_INSTALLED) ||
(lpFormat && (dwFlags || !lpFormat->lpDecimalSep || !lpFormat->lpThousandSep ||
!lpFormat->lpCurrencySymbol || lpFormat->NegativeOrder > 15 ||
lpFormat->PositiveOrder > 3)))
-19
View File
@@ -84,25 +84,6 @@ static RTL_CRITICAL_SECTION PROFILE_CritSect = { &critsect_debug, -1, 0, 0, 0, 0
static const char hex[16] = "0123456789ABCDEF";
static __inline WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n )
{
const WCHAR *end;
for (end = ptr + n; ptr < end; ptr++)
if (*ptr == ch)
return (WCHAR *)(ULONG_PTR)ptr;
return NULL;
}
static __inline WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n )
{
const WCHAR *end;
WCHAR *ret = NULL;
for (end = ptr + n; ptr < end; ptr++)
if (*ptr == ch)
ret = (WCHAR *)(ULONG_PTR)ptr;
return ret;
}
/***********************************************************************
* PROFILE_CopyEntry
*
+131 -11
View File
@@ -958,17 +958,6 @@ SetThreadStackGuarantee(IN OUT PULONG StackSizeInBytes)
return FALSE;
}
HANDLE
WINAPI
ReOpenFile(IN HANDLE hOriginalFile,
IN DWORD dwDesiredAccess,
IN DWORD dwShareMode,
IN DWORD dwFlags)
{
STUB;
return INVALID_HANDLE_VALUE;
}
BOOL
WINAPI
SetProcessWorkingSetSizeEx(IN HANDLE hProcess,
@@ -1259,3 +1248,134 @@ UnregisterConsoleIME(VOID)
STUB;
return FALSE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
BaseCheckRunApp(IN DWORD Unknown1,
IN DWORD Unknown2,
IN DWORD Unknown3,
IN DWORD Unknown4,
IN DWORD Unknown5,
IN DWORD Unknown6,
IN DWORD Unknown7,
IN DWORD Unknown8,
IN DWORD Unknown9,
IN DWORD Unknown10)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
BasepCheckWinSaferRestrictions(IN DWORD Unknown1,
IN DWORD Unknown2,
IN DWORD Unknown3,
IN DWORD Unknown4,
IN DWORD Unknown5,
IN DWORD Unknown6)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
NumaVirtualQueryNode(IN DWORD Unknown1,
IN DWORD Unknown2,
IN DWORD Unknown3,
IN DWORD Unknown4)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
HANDLE
WINAPI
ReOpenFile(IN HANDLE hOriginalFile,
IN DWORD dwDesiredAccess,
IN DWORD dwShareMode,
IN DWORD dwFlags)
{
STUB;
return INVALID_HANDLE_VALUE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
SetLastConsoleEventActive(VOID)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
SetConsoleCommandHistoryMode(IN DWORD dwMode)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
SetLocalPrimaryComputerNameA(IN DWORD Unknown1,
IN DWORD Unknown2)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
BOOL
WINAPI
SetLocalPrimaryComputerNameW(IN DWORD Unknown1,
IN DWORD Unknown2)
{
STUB;
return FALSE;
}
/*
* @unimplemented
*/
VOID
WINAPI
SetTermsrvAppInstallMode(IN BOOL bInstallMode)
{
STUB;
}
/*
* @unimplemented
*/
BOOL
WINAPI
TermsrvAppInstallMode(VOID)
{
STUB;
return FALSE;
}
+3 -4
View File
@@ -9,10 +9,9 @@
#include <k32.h>
#include <reactos/buildno.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32Ver);
#define NDEBUG
#include <debug.h>
static ULONG gDebugChannel = kernel32ver;
#define UNICODIZE1(x) L##x
#define UNICODIZE(x) UNICODIZE1(x)
+3 -3
View File
@@ -9,9 +9,9 @@
* 2001-12-07 created
*/
#include <k32.h>
#include <wine/debug.h>
WINE_DEFAULT_DEBUG_CHANNEL(kernel32session);
#define NDEBUG
#include <debug.h>
//static ULONG gDebugChannel = kernel32session; not actually used
DWORD ActiveConsoleSessionId = 0;
+34 -4
View File
@@ -1910,6 +1910,7 @@ WSPIoctl(IN SOCKET Handle,
OUT LPINT lpErrno)
{
PSOCKET_INFORMATION Socket = NULL;
BOOLEAN NeedsCompletion;
/* Get the Socket Structure associate to this Socket*/
Socket = GetSocketStructure(Handle);
@@ -1918,6 +1919,8 @@ WSPIoctl(IN SOCKET Handle,
*lpErrno = WSAENOTSOCK;
return SOCKET_ERROR;
}
*lpcbBytesReturned = 0;
switch( dwIoControlCode )
{
@@ -1928,17 +1931,44 @@ WSPIoctl(IN SOCKET Handle,
return SOCKET_ERROR;
}
Socket->SharedData.NonBlocking = *((PULONG)lpvInBuffer) ? 1 : 0;
return SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL);
*lpErrno = SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL);
if (*lpErrno != NO_ERROR)
return SOCKET_ERROR;
else
return NO_ERROR;
case FIONREAD:
if( cbOutBuffer < sizeof(INT) || IS_INTRESOURCE(lpvOutBuffer) )
{
*lpErrno = WSAEFAULT;
return SOCKET_ERROR;
}
return GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL);
*lpErrno = GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL);
if (*lpErrno != NO_ERROR)
return SOCKET_ERROR;
else
{
*lpcbBytesReturned = sizeof(ULONG);
return NO_ERROR;
}
default:
*lpErrno = WSAEINVAL;
return SOCKET_ERROR;
*lpErrno = Socket->HelperData->WSHIoctl(Socket->HelperContext,
Handle,
Socket->TdiAddressHandle,
Socket->TdiConnectionHandle,
dwIoControlCode,
lpvInBuffer,
cbInBuffer,
lpvOutBuffer,
cbOutBuffer,
lpcbBytesReturned,
lpOverlapped,
lpCompletionRoutine,
(LPBOOL)&NeedsCompletion);
if (*lpErrno != NO_ERROR)
return SOCKET_ERROR;
else
return NO_ERROR;
}
}
+5 -5
View File
@@ -126,9 +126,9 @@
@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast
@ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid
@ cdecl __STRINGTOLD(ptr ptr str long)
# @ cdecl ___lc_codepage_func()
@ cdecl ___lc_codepage_func()
# @ cdecl ___lc_collate_cp_func()
# @ cdecl ___lc_handle_func()
@ cdecl ___lc_handle_func()
# @ cdecl ___mb_cur_max_func() MSVCRT___mb_cur_max_func
@ cdecl ___setlc_active_func()
@ cdecl ___unguarded_readlc_active_add_func()
@@ -151,10 +151,10 @@
@ cdecl __isascii(long) __isascii
@ cdecl __iscsym(long) __iscsym
@ cdecl __iscsymf(long) __iscsymf
@ extern __lc_codepage __lc_codepage
@ extern __lc_codepage MSVCRT___lc_codepage
@ stub __lc_collate
@ extern __lc_collate_cp __lc_collate_cp
@ extern __lc_handle __lc_handle
@ extern __lc_collate_cp MSVCRT___lc_collate_cp
@ extern __lc_handle MSVCRT___lc_handle
@ cdecl __lconv_init()
# stub __libm_sse2_acos
# stub __libm_sse2_acosf
+10 -31
View File
@@ -175,37 +175,16 @@ static HICON SIC_OverlayShortcutImage(HICON SourceIcon, BOOL large)
if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight,
SourceDC, 0, 0, SRCCOPY)) goto fail;
/* Check if we can use alpha blending */
if (ShortcutBitmapInfo.bmBitsPixel == 32)
{
/* Use alpha blending to make sure the target alpha channel stays valid */
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
if (!GdiAlphaBlend(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
(BLENDFUNCTION){AC_SRC_OVER, 0, 255, AC_SRC_ALPHA})) goto fail;
}
else
{
/* Copy the source xor bitmap to the target and clear out part of it by using
the shortcut mask */
if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCAND))
{
goto fail;
}
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
/* Now put in the shortcut xor mask */
if (! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, SRCINVERT))
{
goto fail;
}
}
/* Copy the source xor bitmap to the target and clear out part of it by using
the shortcut mask */
if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail;
if (!MaskBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight,
ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight,
ShortcutDC, 0, 0, ShortcutIconInfo.hbmMask, 0, 0,
MAKEROP4(SRCCOPY, 0xAA0000)))
{
goto fail;
}
/* Clean up, we're not goto'ing to 'fail' after this so we can be lazy and not set
handles to NULL */
+2 -2
View File
@@ -91,7 +91,7 @@ static void FillNumberFmt(NUMBERFMTW *fmt, LPWSTR decimal_buffer, int decimal_bu
* Format an integer according to the current locale
*
* RETURNS
* The number of bytes written on success or 0 on failure
* The number of characters written on success or 0 on failure
*/
static int FormatInt(LONGLONG qdwValue, LPWSTR pszBuf, int cchBuf)
{
@@ -124,7 +124,7 @@ static int FormatInt(LONGLONG qdwValue, LPWSTR pszBuf, int cchBuf)
* after the decimal point
*
* RETURNS
* The number of bytes written on success or 0 on failure
* The number of characters written on success or 0 on failure
*/
static int FormatDouble(double value, int decimals, LPWSTR pszBuf, int cchBuf)
{
+5 -3
View File
@@ -459,7 +459,7 @@ select(IN INT nfds,
DereferenceProviderByPointer(Provider);
if (Errno != NO_ERROR)
if (Count == SOCKET_ERROR)
{
WSASetLastError(Errno);
return SOCKET_ERROR;
@@ -586,13 +586,15 @@ ioctlsocket(IN SOCKET s,
IN LONG cmd,
IN OUT ULONG FAR* argp)
{
ULONG tmp;
return WSAIoctl(s,
cmd,
argp,
sizeof(ULONG),
argp,
sizeof(ULONG),
argp,
&tmp,
0,
0);
}
@@ -642,7 +644,7 @@ WSAAccept(IN SOCKET s,
if (Socket == INVALID_SOCKET)
WSASetLastError(Errno);
if ( addr )
if ( addr && addrlen )
{
#if DBG
LPSOCKADDR_IN sa = (LPSOCKADDR_IN)addr;
+217 -8
View File
@@ -20,32 +20,238 @@ VOID
NTAPI
Device_SaveCurrentSettings(IN PPCI_CONFIGURATOR_CONTEXT Context)
{
UNIMPLEMENTED;
while (TRUE);
PPCI_COMMON_HEADER PciData;
PIO_RESOURCE_DESCRIPTOR IoDescriptor;
PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor;
PPCI_FUNCTION_RESOURCES Resources;
PULONG BarArray;
ULONG Bar, BarMask, i;
/* Get variables from context */
PciData = Context->Current;
Resources = Context->PdoExtension->Resources;
/* Loop all the PCI BARs */
BarArray = PciData->u.type0.BaseAddresses;
for (i = 0; i <= PCI_TYPE0_ADDRESSES; i++)
{
/* Get the resource descriptor and limit descriptor for this BAR */
CmDescriptor = &Resources->Current[i];
IoDescriptor = &Resources->Limit[i];
/* Build the resource descriptor based on the limit descriptor */
CmDescriptor->Type = IoDescriptor->Type;
if (CmDescriptor->Type == CmResourceTypeNull) continue;
CmDescriptor->Flags = IoDescriptor->Flags;
CmDescriptor->ShareDisposition = IoDescriptor->ShareDisposition;
CmDescriptor->u.Generic.Start.HighPart = 0;
CmDescriptor->u.Generic.Length = IoDescriptor->u.Generic.Length;
/* Read the actual BAR value */
Bar = BarArray[i];
/* Check which BAR is being processed now */
if (i != PCI_TYPE0_ADDRESSES)
{
/* Check if this is an I/O BAR */
if (Bar & PCI_ADDRESS_IO_SPACE)
{
/* Use the right mask to get the I/O port base address */
ASSERT(CmDescriptor->Type == CmResourceTypePort);
BarMask = PCI_ADDRESS_IO_ADDRESS_MASK;
}
else
{
/* It's a RAM BAR, use the right mask to get the base address */
ASSERT(CmDescriptor->Type == CmResourceTypeMemory);
BarMask = PCI_ADDRESS_MEMORY_ADDRESS_MASK;
/* Check if it's a 64-bit BAR */
if ((Bar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_64BIT)
{
/* The next BAR value is actually the high 32-bits */
CmDescriptor->u.Memory.Start.HighPart = BarArray[i + 1];
}
else if ((Bar & PCI_ADDRESS_MEMORY_TYPE_MASK) == PCI_TYPE_20BIT)
{
/* Legacy BAR, don't read more than 20 bits of the address */
BarMask = 0xFFFF0;
}
}
}
else
{
/* Actually a ROM BAR, so read the correct register */
Bar = PciData->u.type0.ROMBaseAddress;
/* Apply the correct mask for ROM BARs */
BarMask = PCI_ADDRESS_ROM_ADDRESS_MASK;
/* Make sure it's enabled */
if (!(Bar & PCI_ROMADDRESS_ENABLED))
{
/* If it isn't, then a descriptor won't be built for it */
CmDescriptor->Type = CmResourceTypeNull;
continue;
}
}
/* Now we have the right mask, read the actual address from the BAR */
Bar &= BarMask;
CmDescriptor->u.Memory.Start.LowPart = Bar;
/* And check for invalid BAR addresses */
if (!(CmDescriptor->u.Memory.Start.HighPart | Bar))
{
/* Skip these descriptors */
CmDescriptor->Type = CmResourceTypeNull;
DPRINT1("Invalid BAR\n");
}
}
/* Also save the sub-IDs that came directly from the PCI header */
Context->PdoExtension->SubsystemVendorId = PciData->u.type0.SubVendorID;
Context->PdoExtension->SubsystemId = PciData->u.type0.SubSystemID;
}
VOID
NTAPI
Device_SaveLimits(IN PPCI_CONFIGURATOR_CONTEXT Context)
{
UNIMPLEMENTED;
while (TRUE);
PPCI_COMMON_HEADER Current, PciData;
PPCI_PDO_EXTENSION PdoExtension;
PULONG BarArray;
PIO_RESOURCE_DESCRIPTOR Limit;
ULONG i;
/* Get pointers from the context */
PdoExtension = Context->PdoExtension;
Current = Context->Current;
PciData = Context->PciData;
/* And get the array of bARs */
BarArray = PciData->u.type0.BaseAddresses;
/* First, check for IDE controllers that are not in native mode */
if ((PdoExtension->BaseClass == PCI_CLASS_MASS_STORAGE_CTLR) &&
(PdoExtension->SubClass == PCI_SUBCLASS_MSC_IDE_CTLR) &&
(PdoExtension->ProgIf & 5) != 5)
{
/* They should not be using any non-legacy resources */
BarArray[0] = 0;
BarArray[1] = 0;
BarArray[2] = 0;
BarArray[3] = 0;
}
else if ((PdoExtension->VendorId == 0x5333) &&
((PdoExtension->DeviceId == 0x88F0) ||
(PdoExtension->DeviceId == 0x8880)))
{
/*
* The problem is caused by the S3 Vision 968/868 video controller which
* is used on the Diamond Stealth 64 Video 3000 series, Number Nine 9FX
* motion 771, and other popular video cards, all containing a memory bug.
* The 968/868 claims to require 32 MB of memory, but it actually decodes
* 64 MB of memory.
*/
for (i = 0; i < PCI_TYPE0_ADDRESSES; i++)
{
/* Find its 32MB RAM BAR */
if (BarArray[i] == 0xFE000000)
{
/* Increase it to 64MB to make sure nobody touches the buffer */
BarArray[i] = 0xFC000000;
DPRINT1("PCI - Adjusted broken S3 requirement from 32MB to 64MB\n");
}
}
}
/* Check for Cirrus Logic GD5430/5440 cards */
if ((PdoExtension->VendorId == 0x1013) && (PdoExtension->DeviceId == 0xA0))
{
/* Check for the I/O port requirement */
if (BarArray[1] == 0xFC01)
{
/* Check for completely bogus BAR */
if (Current->u.type0.BaseAddresses[1] == 1)
{
/* Ignore it */
BarArray[1] = 0;
DPRINT1("PCI - Ignored Cirrus GD54xx broken IO requirement (400 ports)\n");
}
else
{
/* Otherwise, this BAR seems okay */
DPRINT1("PCI - Cirrus GD54xx 400 port IO requirement has a valid setting (%08x)\n",
Current->u.type0.BaseAddresses[1]);
}
}
else if (BarArray[1])
{
/* Strange, the I/O BAR was not found as expected (or at all) */
DPRINT1("PCI - Warning Cirrus Adapter 101300a0 has unexpected resource requirement (%08x)\n",
BarArray[1]);
}
}
/* Finally, process all the limit descriptors */
Limit = PdoExtension->Resources->Limit;
for (i = 0; i < PCI_TYPE0_ADDRESSES; i++)
{
/* And build them based on the BARs */
if (PciCreateIoDescriptorFromBarLimit(&Limit[i], &BarArray[i], FALSE))
{
/* This function returns TRUE if the BAR was 64-bit, handle this */
ASSERT((i + 1) < PCI_TYPE0_ADDRESSES);
i++;
(&Limit[i])->Type == CmResourceTypeNull;
}
}
/* Create the last descriptor based on the ROM address */
PciCreateIoDescriptorFromBarLimit(&Limit[i],
&PciData->u.type0.ROMBaseAddress,
TRUE);
}
VOID
NTAPI
Device_MassageHeaderForLimitsDetermination(IN PPCI_CONFIGURATOR_CONTEXT Context)
{
UNIMPLEMENTED;
while (TRUE);
PPCI_COMMON_HEADER PciData;
PPCI_PDO_EXTENSION PdoExtension;
PULONG BarArray;
ULONG i = 0;
/* Get pointers from context data */
PdoExtension = Context->PdoExtension;
PciData = Context->PciData;
/* Get the array of BARs */
BarArray = PciData->u.type0.BaseAddresses;
/* Check for IDE controllers that are not in native mode */
if ((PdoExtension->BaseClass == PCI_CLASS_MASS_STORAGE_CTLR) &&
(PdoExtension->SubClass == PCI_SUBCLASS_MSC_IDE_CTLR) &&
(PdoExtension->ProgIf & 5) != 5)
{
/* These controllers only use legacy resources */
i = 4;
}
/* Set all the bits on, which will allow us to recover the limit data */
for (i = 0; i < PCI_TYPE0_ADDRESSES; i++) BarArray[i] = 0xFFFFFFFF;
/* Do the same for the PCI ROM BAR */
PciData->u.type0.ROMBaseAddress = PCI_ADDRESS_ROM_ADDRESS_MASK;
}
VOID
NTAPI
Device_RestoreCurrent(IN PPCI_CONFIGURATOR_CONTEXT Context)
{
UNIMPLEMENTED;
while (TRUE);
/* Nothing to do for devices */
return;
}
VOID
@@ -54,6 +260,7 @@ Device_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context,
IN PPCI_COMMON_HEADER PciData,
IN PIO_RESOURCE_DESCRIPTOR IoDescriptor)
{
/* Not yet implemented */
UNIMPLEMENTED;
while (TRUE);
}
@@ -62,6 +269,7 @@ VOID
NTAPI
Device_ResetDevice(IN PPCI_CONFIGURATOR_CONTEXT Context)
{
/* Not yet implemented */
UNIMPLEMENTED;
while (TRUE);
}
@@ -70,6 +278,7 @@ VOID
NTAPI
Device_ChangeResourceSettings(IN PPCI_CONFIGURATOR_CONTEXT Context)
{
/* Not yet implemented */
UNIMPLEMENTED;
while (TRUE);
}
+63 -6
View File
@@ -32,7 +32,7 @@ PCI_CONFIGURATOR PciConfigurators[] =
PPBridge_SaveCurrentSettings,
PPBridge_ChangeResourceSettings,
PPBridge_GetAdditionalResourceDescriptors,
PPBridge_ResetDevice
PPBridge_ResetDevice
},
{
Cardbus_MassageHeaderForLimitsDetermination,
@@ -44,7 +44,7 @@ PCI_CONFIGURATOR PciConfigurators[] =
Cardbus_ResetDevice
}
};
/* FUNCTIONS ******************************************************************/
/*
@@ -715,10 +715,10 @@ PciWriteLimitsAndRestoreCurrent(IN PVOID Reserved,
/* Write the limit discovery header */
PciWriteDeviceConfig(PdoExtension, PciData, 0, PCI_COMMON_HDR_LENGTH);
/* Now read what the device indicated the limits are */
PciReadDeviceConfig(PdoExtension, PciData, 0, PCI_COMMON_HDR_LENGTH);
/* Then write back the original configuration header */
PciWriteDeviceConfig(PdoExtension, Current, 0, PCI_COMMON_HDR_LENGTH);
@@ -735,7 +735,7 @@ PciWriteLimitsAndRestoreCurrent(IN PVOID Reserved,
/* Copy back the original status that was saved as well */
Current->Status = Context->Status;
/* Call the configurator to restore any other data that might've changed */
Context->Configurator->RestoreCurrent(Context);
}
@@ -917,6 +917,62 @@ PciGetFunctionLimits(IN PPCI_PDO_EXTENSION PdoExtension,
return Status;
}
VOID
NTAPI
PciProcessBus(IN PPCI_FDO_EXTENSION DeviceExtension)
{
PPCI_PDO_EXTENSION PdoExtension;
PDEVICE_OBJECT PhysicalDeviceObject;
PAGED_CODE();
/* Get the PDO Extension */
PhysicalDeviceObject = DeviceExtension->PhysicalDeviceObject;
PdoExtension = (PPCI_PDO_EXTENSION)PhysicalDeviceObject->DeviceExtension;
/* Cheeck if this is the root bus */
if (!PCI_IS_ROOT_FDO(DeviceExtension))
{
/* Not really handling this year */
UNIMPLEMENTED;
while (TRUE);
/* Check for PCI bridges with the ISA bit set, or required */
if ((PdoExtension) &&
(PciClassifyDeviceType(PdoExtension) == PciTypePciBridge) &&
((PdoExtension->Dependent.type1.IsaBitRequired) ||
(PdoExtension->Dependent.type1.IsaBitSet)))
{
/* We'll need to do some legacy support */
UNIMPLEMENTED;
while (TRUE);
}
}
else
{
/* Scan all of the root bus' children bridges */
for (PdoExtension = DeviceExtension->ChildBridgePdoList;
PdoExtension;
PdoExtension = PdoExtension->NextBridge)
{
/* Find any that have the VGA decode bit on */
if (PdoExtension->Dependent.type1.VgaBitSet)
{
/* Again, some more legacy support we'll have to do */
UNIMPLEMENTED;
while (TRUE);
}
}
}
/* Check for ACPI systems where the OS assigns bus numbers */
if (PciAssignBusNumbers)
{
/* Not yet supported */
UNIMPLEMENTED;
while (TRUE);
}
}
NTSTATUS
NTAPI
PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension)
@@ -1363,7 +1419,8 @@ PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension)
}
}
/* Enumeration is completed */
/* Enumeration completed, do a final pass now that all devices are found */
if (ProcessFlag) PciProcessBus(DeviceExtension);
return STATUS_SUCCESS;
}
+19
View File
@@ -102,6 +102,18 @@ typedef enum _PCI_SIGNATURE
PciInterface_Location = 'icP?'
} PCI_SIGNATURE, *PPCI_SIGNATURE;
//
// Driver-handled PCI Device Types
//
typedef enum _PCI_DEVICE_TYPES
{
PciTypeInvalid,
PciTypeHostBridge,
PciTypePciBridge,
PciTypeCardbusBridge,
PciTypeDevice
} PCI_DEVICE_TYPES;
//
// Device Extension Logic States
//
@@ -1064,6 +1076,12 @@ PciCanDisableDecodes(
IN BOOLEAN ForPowerDown
);
PCI_DEVICE_TYPES
NTAPI
PciClassifyDeviceType(
IN PPCI_PDO_EXTENSION PdoExtension
);
ULONG_PTR
NTAPI
PciExecuteCriticalSystemRoutine(
@@ -1607,6 +1625,7 @@ extern PCI_INTERFACE TranslatorInterfaceInterrupt;
extern PDRIVER_OBJECT PciDriverObject;
extern PWATCHDOG_TABLE WdTable;
extern PPCI_HACK_ENTRY PciHackTable;
extern BOOLEAN PciAssignBusNumbers;
extern BOOLEAN PciEnableNativeModeATA;
/* Exported by NTOS, should this go in the NDK? */
+18
View File
@@ -1041,6 +1041,24 @@ PciCanDisableDecodes(IN PPCI_PDO_EXTENSION DeviceExtension,
return !(HackFlags & PCI_HACK_NO_PM_CAPS);
}
PCI_DEVICE_TYPES
NTAPI
PciClassifyDeviceType(IN PPCI_PDO_EXTENSION PdoExtension)
{
ASSERT(PdoExtension->ExtensionType == PciPdoExtensionType);
/* Differenriate between devices and bridges */
if (PdoExtension->BaseClass != PCI_CLASS_BRIDGE_DEV) return PciTypeDevice;
/* The PCI Bus driver handles only CardBus and PCI bridges (plus host) */
if (PdoExtension->SubClass == PCI_SUBCLASS_BR_HOST) return PciTypeHostBridge;
if (PdoExtension->SubClass == PCI_SUBCLASS_BR_PCI_TO_PCI) return PciTypePciBridge;
if (PdoExtension->SubClass == PCI_SUBCLASS_BR_CARDBUS) return PciTypeCardbusBridge;
/* Any other kind of bridge is treated like a device */
return PciTypeDevice;
}
ULONG_PTR
NTAPI
PciExecuteCriticalSystemRoutine(IN ULONG_PTR IpiContext)
+1 -1
View File
@@ -73,7 +73,7 @@ CdfsGetPVDData(PUCHAR Buffer,
/* Extract the volume label */
pc = Pvd->VolumeId;
pw = CdInfo->VolumeLabel;
for (i = 0; i < MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR); i++)
for (i = 0; i < (MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)) - 1; i++)
{
*pw++ = (WCHAR)*pc++;
}
+41 -3
View File
@@ -95,6 +95,46 @@ CdfsFileFlagsToAttributes(PFCB Fcb,
((Fcb->Entry.FileFlags & FILE_FLAG_READONLY) ? FILE_ATTRIBUTE_READONLY : 0);
}
BOOLEAN
CdfsIsNameLegalDOS8Dot3(IN UNICODE_STRING FileName
)
{
ULONG i;
STRING DbcsName;
CHAR DbcsNameBuffer[12];
/* 8dot3 filename is max 12 length */
if (FileName.Length / sizeof(WCHAR) > 12)
{
return FALSE;
}
for (i = 0; i < FileName.Length / sizeof(WCHAR) ; i++)
{
/* Don't allow spaces in FileName */
if (FileName.Buffer[i] == L' ')
return FALSE;
}
/* If FileName is finishing with a dot, remove it */
if (FileName.Buffer[FileName.Length / sizeof(WCHAR) - 1] == '.')
{
FileName.Length -= sizeof(WCHAR);
}
/* Finally, convert the string to call the FsRtl function */
DbcsName.MaximumLength = 12;
DbcsName.Buffer = DbcsNameBuffer;
if (!NT_SUCCESS(RtlUnicodeStringToCountedOemString(&DbcsName,
&FileName,
FALSE )))
{
return FALSE;
}
return FsRtlIsFatDbcsLegal(DbcsName, FALSE, FALSE, FALSE);
}
VOID
CdfsShortNameCacheGet
(PFCB DirectoryFcb,
@@ -102,7 +142,6 @@ CdfsShortNameCacheGet
PUNICODE_STRING LongName,
PUNICODE_STRING ShortName)
{
BOOLEAN HasSpaces;
PLIST_ENTRY Entry;
PCDFS_SHORT_NAME ShortNameEntry;
GENERATE_NAME_CONTEXT Context = { 0 };
@@ -132,8 +171,7 @@ CdfsShortNameCacheGet
}
/* Cache miss */
if ((RtlIsNameLegalDOS8Dot3(LongName, NULL, &HasSpaces) == FALSE) ||
(HasSpaces == TRUE))
if (!CdfsIsNameLegalDOS8Dot3(*LongName))
{
RtlGenerate8dot3Name(LongName, FALSE, &Context, ShortName);
}
+4 -1
View File
@@ -466,7 +466,7 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
/* This a open operation for the volume itself */
if (FileObject->FileName.Length == 0 &&
FileObject->RelatedFileObject == NULL)
(FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL))
{
if (RequestedDisposition == FILE_CREATE ||
RequestedDisposition == FILE_OVERWRITE_IF ||
@@ -474,10 +474,13 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp )
{
return(STATUS_ACCESS_DENIED);
}
#if 0
/* In spite of what is shown in WDK, it seems that Windows FAT driver doesn't perform that test */
if (RequestedOptions & FILE_DIRECTORY_FILE)
{
return(STATUS_NOT_A_DIRECTORY);
}
#endif
pFcb = DeviceExt->VolumeFcb;
pCcb = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList);
if (pCcb == NULL)
+419 -2
View File
@@ -13,13 +13,430 @@
/* FUNCTIONS ****************************************************************/
/* Last handle to a file object is closed */
NTSTATUS
NTAPI
FatiCleanup(PFAT_IRP_CONTEXT IrpContext, PIRP Irp)
{
PIO_STACK_LOCATION IrpSp;
PFILE_OBJECT FileObject;
TYPE_OF_OPEN TypeOfOpen;
PSHARE_ACCESS ShareAccess;
BOOLEAN SendUnlockNotification = FALSE;
PLARGE_INTEGER TruncateSize = NULL;
//LARGE_INTEGER LocalTruncateSize;
BOOLEAN AcquiredVcb = FALSE, AcquiredFcb = FALSE;
NTSTATUS Status;
PVCB Vcb;
PFCB Fcb;
PCCB Ccb;
IrpSp = IoGetCurrentIrpStackLocation( Irp );
DPRINT("FatiCleanup\n");
DPRINT("\tIrp = %p\n", Irp);
DPRINT("\t->FileObject = %p\n", IrpSp->FileObject);
FileObject = IrpSp->FileObject;
TypeOfOpen = FatDecodeFileObject(FileObject, &Vcb, &Fcb, &Ccb);
if (TypeOfOpen == UnopenedFileObject)
{
DPRINT1("Unopened File Object\n");
FatCompleteRequest(IrpContext, Irp, STATUS_SUCCESS);
return STATUS_SUCCESS;
}
if (FlagOn( FileObject->Flags, FO_CLEANUP_COMPLETE ))
{
/* Just flush the file */
if (FlagOn(Vcb->State, VCB_STATE_FLAG_DEFERRED_FLUSH) &&
FlagOn(FileObject->Flags, FO_FILE_MODIFIED) &&
!FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED) &&
(TypeOfOpen == UserFileOpen))
{
//Status = FatFlushFile(IrpContext, Fcb, Flush);
//if (!NT_SUCCESS(Status)) FatNormalizeAndRaiseStatus(IrpContext, Status);
UNIMPLEMENTED;
}
FatCompleteRequest(IrpContext, Irp, STATUS_SUCCESS);
return STATUS_SUCCESS;
}
if (TypeOfOpen == UserFileOpen ||
TypeOfOpen == UserDirectoryOpen)
{
ASSERT(Fcb != NULL);
(VOID)FatAcquireExclusiveFcb(IrpContext, Fcb);
AcquiredFcb = TRUE;
/* Set FCB flags according to DELETE_ON_CLOSE */
if (FlagOn(Ccb->Flags, CCB_DELETE_ON_CLOSE))
{
ASSERT(FatNodeType(Fcb) != FAT_NTC_ROOT_DCB);
SetFlag(Fcb->State, FCB_STATE_DELETE_ON_CLOSE);
/* Issue a notification */
if (TypeOfOpen == UserDirectoryOpen)
{
FsRtlNotifyFullChangeDirectory(Vcb->NotifySync,
&Vcb->NotifyList,
FileObject->FsContext,
NULL,
FALSE,
FALSE,
0,
NULL,
NULL,
NULL);
}
}
/* If file should be deleted, acquire locks */
if ((Fcb->UncleanCount == 1) &&
FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) &&
(Fcb->Condition != FcbBad) &&
!FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED))
{
FatReleaseFcb(IrpContext, Fcb);
AcquiredFcb = FALSE;
(VOID)FatAcquireExclusiveVcb(IrpContext, Vcb);
AcquiredVcb = TRUE;
(VOID)FatAcquireExclusiveFcb(IrpContext, Fcb);
AcquiredFcb = TRUE;
}
}
/* Acquire VCB lock if it was a volume open */
if (TypeOfOpen == UserVolumeOpen)
{
(VOID)FatAcquireExclusiveVcb(IrpContext, Vcb);
AcquiredVcb = TRUE;
}
/* Cleanup all notifications */
if (TypeOfOpen == UserDirectoryOpen)
{
FsRtlNotifyCleanup(Vcb->NotifySync,
&Vcb->NotifyList,
Ccb);
}
if (Fcb)
{
//TODO: FatVerifyFcb
}
switch (TypeOfOpen)
{
case DirectoryFile:
case VirtualVolumeFile:
DPRINT1("Cleanup VirtualVolumeFile/DirectoryFile\n");
ShareAccess = NULL;
break;
case UserVolumeOpen:
DPRINT("Cleanup UserVolumeOpen\n");
if (FlagOn(Ccb->Flags, CCB_COMPLETE_DISMOUNT))
{
FatCheckForDismount( IrpContext, Vcb, TRUE );
} else if (FileObject->WriteAccess &&
FlagOn(FileObject->Flags, FO_FILE_MODIFIED))
{
UNIMPLEMENTED;
}
/* Release the volume and send notification */
if (FlagOn(Vcb->State, VCB_STATE_FLAG_LOCKED) &&
(Vcb->FileObjectWithVcbLocked == FileObject))
{
UNIMPLEMENTED;
SendUnlockNotification = TRUE;
}
ShareAccess = &Vcb->ShareAccess;
break;
case EaFile:
DPRINT1("Cleanup EaFileObject\n");
ShareAccess = NULL;
break;
case UserDirectoryOpen:
DPRINT("Cleanup UserDirectoryOpen\n");
ShareAccess = &Fcb->ShareAccess;
/* Should it be a delayed close? */
if ((Fcb->UncleanCount == 1) &&
(Fcb->OpenCount == 1) &&
(Fcb->Dcb.DirectoryFileOpenCount == 0) &&
!FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) &&
Fcb->Condition == FcbGood)
{
/* Yes, a delayed one */
SetFlag(Fcb->State, FCB_STATE_DELAY_CLOSE);
}
if (VcbGood == Vcb->Condition)
{
//FatUpdateDirentFromFcb( IrpContext, FileObject, Fcb, Ccb );
//TODO: Actually update dirent
}
if ((Fcb->UncleanCount == 1) &&
(FatNodeType(Fcb) == FAT_NTC_DCB) &&
(FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE)) &&
(Fcb->Condition != FcbBad) &&
!FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED))
{
UNIMPLEMENTED;
}
/* Decrement unclean counter */
ASSERT(Fcb->UncleanCount != 0);
Fcb->UncleanCount--;
break;
case UserFileOpen:
DPRINT("Cleanup UserFileOpen\n");
ShareAccess = &Fcb->ShareAccess;
/* Should it be a delayed close? */
if ((FileObject->SectionObjectPointer->DataSectionObject == NULL) &&
(FileObject->SectionObjectPointer->ImageSectionObject == NULL) &&
(Fcb->UncleanCount == 1) &&
(Fcb->OpenCount == 1) &&
!FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) &&
Fcb->Condition == FcbGood)
{
/* Yes, a delayed one */
SetFlag(Fcb->State, FCB_STATE_DELAY_CLOSE);
}
/* Unlock all file locks */
FsRtlFastUnlockAll(&Fcb->Fcb.Lock,
FileObject,
IoGetRequestorProcess(Irp),
NULL);
if (Vcb->Condition == VcbGood)
{
if (Fcb->Condition != FcbBad)
{
//FatUpdateDirentFromFcb( IrpContext, FileObject, Fcb, Ccb );
// TODO: Update on-disk structures
}
if (Fcb->UncleanCount == 1 &&
Fcb->Condition != FcbBad)
{
//DELETE_CONTEXT DeleteContext;
/* Should this file be deleted on close? */
if (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) &&
!FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED))
{
UNIMPLEMENTED;
}
else
{
if (!FlagOn(Fcb->State, FCB_STATE_PAGEFILE) &&
(Fcb->Header.ValidDataLength.LowPart < Fcb->Header.FileSize.LowPart))
{
#if 0
ULONG ValidDataLength;
ValidDataLength = Fcb->Header.ValidDataLength.LowPart;
if (ValidDataLength < Fcb->ValidDataToDisk) {
ValidDataLength = Fcb->ValidDataToDisk;
}
if (ValidDataLength < Fcb->Header.FileSize.LowPart)
{
FatZeroData( IrpContext,
Vcb,
FileObject,
ValidDataLength,
Fcb->Header.FileSize.LowPart -
ValidDataLength );
Fcb->ValidDataToDisk =
Fcb->Header.ValidDataLength.LowPart =
Fcb->Header.FileSize.LowPart;
if (CcIsFileCached(FileObject))
{
CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize);
}
}
#endif
DPRINT1("Zeroing out data is not implemented\n");
}
}
/* Should the file be truncated on close? */
if (FlagOn(Fcb->State, FCB_STATE_TRUNCATE_ON_CLOSE))
{
if (Vcb->Condition == VcbGood)
{
// TODO: Actually truncate the file allocation
UNIMPLEMENTED;
}
/* Remove truncation flag */
Fcb->State &= ~FCB_STATE_TRUNCATE_ON_CLOSE;
}
/* Check again if it should be deleted */
if (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE) &&
Fcb->Header.AllocationSize.LowPart == 0)
{
FatNotifyReportChange(IrpContext,
Vcb,
Fcb,
FILE_NOTIFY_CHANGE_FILE_NAME,
FILE_ACTION_REMOVED);
}
/* Remove the entry from the splay table if the file was deleted */
if (FlagOn(Fcb->State, FCB_STATE_DELETE_ON_CLOSE))
{
FatRemoveNames(IrpContext, Fcb);
}
}
}
ASSERT(Fcb->UncleanCount != 0);
Fcb->UncleanCount--;
if (!FlagOn(FileObject->Flags, FO_CACHE_SUPPORTED))
{
ASSERT(Fcb->NonCachedUncleanCount != 0);
Fcb->NonCachedUncleanCount--;
}
if (FlagOn(FileObject->Flags, FO_CACHE_SUPPORTED) &&
(Fcb->NonCachedUncleanCount != 0) &&
(Fcb->NonCachedUncleanCount == Fcb->UncleanCount) &&
(Fcb->SectionObjectPointers.DataSectionObject != NULL))
{
CcFlushCache(&Fcb->SectionObjectPointers, NULL, 0, NULL);
/* Acquire and release PagingIo to get in sync with lazy writer */
ExAcquireResourceExclusiveLite(Fcb->Header.PagingIoResource, TRUE);
ExReleaseResourceLite(Fcb->Header.PagingIoResource);
CcPurgeCacheSection(&Fcb->SectionObjectPointers,
NULL,
0,
FALSE);
}
if (Fcb->Condition == FcbBad)
{
//TruncateSize = &FatLargeZero;
UNIMPLEMENTED;
}
/* Cleanup the cache map */
CcUninitializeCacheMap(FileObject, TruncateSize, NULL);
break;
default:
KeBugCheckEx(FAT_FILE_SYSTEM, __LINE__, (ULONG_PTR)TypeOfOpen, 0, 0);
}
/* Cleanup the share access */
if (ShareAccess)
{
DPRINT("Cleaning up the share access\n");
IoRemoveShareAccess(FileObject, ShareAccess);
}
if (TypeOfOpen == UserFileOpen)
{
/* Update oplocks */
FsRtlCheckOplock(&Fcb->Fcb.Oplock,
Irp,
IrpContext,
NULL,
NULL);
Fcb->Header.IsFastIoPossible = FatIsFastIoPossible(Fcb);
}
/* Set the FO_CLEANUP_COMPLETE flag */
SetFlag(FileObject->Flags, FO_CLEANUP_COMPLETE);
Status = STATUS_SUCCESS;
// TODO: Unpin repinned BCBs
//FatUnpinRepinnedBcbs(IrpContext);
/* Flush the volume if necessary */
if (FlagOn(Vcb->State, VCB_STATE_FLAG_DEFERRED_FLUSH) &&
!FlagOn(Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED))
{
UNIMPLEMENTED;
}
/* Cleanup */
if (AcquiredFcb) FatReleaseFcb(IrpContext, Fcb);
if (AcquiredVcb) FatReleaseVcb(IrpContext, Vcb);
/* Send volume notification */
if (SendUnlockNotification)
FsRtlNotifyVolumeEvent(FileObject, FSRTL_VOLUME_UNLOCK);
return Status;
}
NTSTATUS
NTAPI
FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
DPRINT1("FatCleanup(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
PFAT_IRP_CONTEXT IrpContext;
NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED;
DPRINT("FatCleanup(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
/* FatCleanup works only with a volume device object */
if (DeviceObject == FatGlobalData.DiskDeviceObject)
{
/* Complete the request and return success */
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = FILE_OPENED;
IoCompleteRequest(Irp, IO_DISK_INCREMENT);
return STATUS_SUCCESS;
}
/* Enter FsRtl critical region */
FsRtlEnterFileSystem();
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, TRUE);
/* Call internal function */
Status = FatiCleanup(IrpContext, Irp);
/* Leave FsRtl critical region */
FsRtlExitFileSystem();
return Status;
}
/* EOF */
+628 -2
View File
@@ -11,15 +11,641 @@
#define NDEBUG
#include "fastfat.h"
VOID NTAPI
FatQueueClose(IN PCLOSE_CONTEXT CloseContext,
IN BOOLEAN DelayClose);
PCLOSE_CONTEXT NTAPI
FatRemoveClose(PVCB Vcb OPTIONAL,
PVCB LastVcbHint OPTIONAL);
const ULONG FatMaxDelayedCloseCount = 16;
/* FUNCTIONS ****************************************************************/
NTSTATUS
NTAPI
FatiCommonClose(IN PVCB Vcb,
IN PFCB Fcb,
IN PCCB Ccb,
IN TYPE_OF_OPEN TypeOfOpen,
IN BOOLEAN Wait,
OUT PBOOLEAN VcbDeleted)
{
NTSTATUS Status;
PFCB ParentDcb;
BOOLEAN RecursiveClose, VcbDeletedLv = FALSE;
FAT_IRP_CONTEXT IrpContext;
if (VcbDeleted) *VcbDeleted = FALSE;
if (TypeOfOpen == UnopenedFileObject)
{
DPRINT1("Closing unopened file object\n");
Status = STATUS_SUCCESS;
return Status;
}
RtlZeroMemory(&IrpContext, sizeof(FAT_IRP_CONTEXT));
IrpContext.NodeTypeCode = FAT_NTC_IRP_CONTEXT;
IrpContext.NodeByteSize = sizeof(IrpContext);
IrpContext.MajorFunction = IRP_MJ_CLOSE;
if (Wait) SetFlag(IrpContext.Flags, IRPCONTEXT_CANWAIT);
if (!ExAcquireResourceExclusiveLite(&Vcb->Resource, Wait)) return STATUS_PENDING;
if (Vcb->State & VCB_STATE_FLAG_CLOSE_IN_PROGRESS)
{
RecursiveClose = TRUE;
}
else
{
SetFlag(Vcb->State, VCB_STATE_FLAG_CLOSE_IN_PROGRESS);
RecursiveClose = FALSE;
Vcb->OpenFileCount++;
}
/* Update on-disk structures */
switch (TypeOfOpen)
{
case VirtualVolumeFile:
DPRINT1("Close VirtualVolumeFile\n");
InterlockedDecrement((PLONG)&(Vcb->InternalOpenCount));
InterlockedDecrement((PLONG)&(Vcb->ResidualOpenCount));
Status = STATUS_SUCCESS;
goto close_done;
break;
case UserVolumeOpen:
DPRINT1("Close UserVolumeOpen\n");
Vcb->DirectAccessOpenCount--;
Vcb->OpenFileCount--;
if (FlagOn(Ccb->Flags, CCB_READ_ONLY)) Vcb->ReadOnlyCount--;
FatDeleteCcb(&IrpContext, Ccb);
Status = STATUS_SUCCESS;
goto close_done;
break;
case EaFile:
UNIMPLEMENTED;
break;
case DirectoryFile:
DPRINT1("Close DirectoryFile\n");
InterlockedDecrement((PLONG)&(Fcb->Dcb.DirectoryFileOpenCount));
InterlockedDecrement((PLONG)&(Vcb->InternalOpenCount));
if (FatNodeType(Fcb) == FAT_NTC_ROOT_DCB)
{
InterlockedDecrement((PLONG)&(Vcb->ResidualOpenCount));
}
if (RecursiveClose)
{
Status = STATUS_SUCCESS;
goto close_done;
}
else
{
break;
}
case UserDirectoryOpen:
case UserFileOpen:
DPRINT("Close UserFileOpen/UserDirectoryOpen\n");
if ((FatNodeType(Fcb) == FAT_NTC_DCB) &&
IsListEmpty(&Fcb->Dcb.ParentDcbList) &&
(Fcb->OpenCount == 1) &&
(Fcb->Dcb.DirectoryFile != NULL))
{
PFILE_OBJECT DirectoryFileObject = Fcb->Dcb.DirectoryFile;
DPRINT1("Uninitialize the stream file object\n");
CcUninitializeCacheMap(DirectoryFileObject, NULL, NULL);
Fcb->Dcb.DirectoryFile = NULL;
ObDereferenceObject(DirectoryFileObject);
}
Fcb->OpenCount--;
Vcb->OpenFileCount--;
if (FlagOn(Ccb->Flags, CCB_READ_ONLY)) Vcb->ReadOnlyCount --;
FatDeleteCcb(&IrpContext, Ccb);
break;
default:
KeBugCheckEx(FAT_FILE_SYSTEM, __LINE__, (ULONG_PTR)TypeOfOpen, 0, 0);
}
/* Update in-memory structures */
if (((FatNodeType(Fcb) == FAT_NTC_FCB) &&
(Fcb->OpenCount == 0))
||
((FatNodeType(Fcb) == FAT_NTC_DCB) &&
(IsListEmpty(&Fcb->Dcb.ParentDcbList)) &&
(Fcb->OpenCount == 0) &&
(Fcb->Dcb.DirectoryFileOpenCount == 0)))
{
ParentDcb = Fcb->ParentFcb;
SetFlag(Vcb->State, VCB_STATE_FLAG_DELETED_FCB);
FatDeleteFcb(&IrpContext, Fcb);
while ((FatNodeType(ParentDcb) == FAT_NTC_DCB) &&
IsListEmpty(&ParentDcb->Dcb.ParentDcbList) &&
(ParentDcb->OpenCount == 0) &&
(ParentDcb->Dcb.DirectoryFile != NULL))
{
PFILE_OBJECT DirectoryFileObject;
DirectoryFileObject = ParentDcb->Dcb.DirectoryFile;
DPRINT1("Uninitialize parent Stream Cache Map\n");
CcUninitializeCacheMap(DirectoryFileObject, NULL, NULL);
ParentDcb->Dcb.DirectoryFile = NULL;
ObDereferenceObject(DirectoryFileObject);
if (ParentDcb->Dcb.DirectoryFileOpenCount == 0)
{
PFCB CurrentDcb;
CurrentDcb = ParentDcb;
ParentDcb = CurrentDcb->ParentFcb;
SetFlag(Vcb->State, VCB_STATE_FLAG_DELETED_FCB);
FatDeleteFcb(&IrpContext, CurrentDcb);
}
else
{
break;
}
}
}
Status = STATUS_SUCCESS;
close_done:
/* Closing is done, check if VCB could be closed too */
if (!RecursiveClose)
{
/* One open left - yes, VCB can go away */
if (Vcb->OpenFileCount == 1 &&
!FlagOn(Vcb->State, VCB_STATE_FLAG_DISMOUNT_IN_PROGRESS)
&& VcbDeleted)
{
FatReleaseVcb(&IrpContext, Vcb );
SetFlag(IrpContext.Flags, IRPCONTEXT_CANWAIT);
FatAcquireExclusiveGlobal(&IrpContext);
FatAcquireExclusiveVcb(&IrpContext, Vcb);
Vcb->OpenFileCount--;
VcbDeletedLv = FatCheckForDismount(&IrpContext, Vcb, FALSE);
FatReleaseGlobal(&IrpContext);
if (VcbDeleted) *VcbDeleted = VcbDeletedLv;
}
else
{
/* Remove extra referenec */
Vcb->OpenFileCount --;
}
/* Clear recursion flag if necessary */
if (!VcbDeletedLv)
{
ClearFlag(Vcb->State, VCB_STATE_FLAG_CLOSE_IN_PROGRESS);
}
}
/* Release VCB if it wasn't deleted */
if (!VcbDeletedLv)
FatReleaseVcb(&IrpContext, Vcb);
return Status;
}
NTSTATUS
NTAPI
FatiClose(IN PFAT_IRP_CONTEXT IrpContext,
IN PIRP Irp)
{
PIO_STACK_LOCATION IrpSp;
TYPE_OF_OPEN TypeOfOpen;
PVCB Vcb;
PFCB Fcb;
PCCB Ccb;
BOOLEAN TopLevel, Wait, VcbDeleted = FALSE, DelayedClose = FALSE;
NTSTATUS Status = STATUS_SUCCESS;
PCLOSE_CONTEXT CloseContext = NULL;
TopLevel = FatIsTopLevelIrp(Irp);
/* Get current IRP stack location */
IrpSp = IoGetCurrentIrpStackLocation(Irp);
/* Decode incoming file object */
TypeOfOpen = FatDecodeFileObject(IrpSp->FileObject, &Vcb, &Fcb, &Ccb);
/* Set CCB read only flag */
if (Ccb && IsFileObjectReadOnly(IrpSp->FileObject))
SetFlag(Ccb->Flags, CCB_READ_ONLY);
/* It's possible to wait only if we are top level or not a system process */
Wait = TopLevel && (PsGetCurrentProcess() != FatGlobalData.SystemProcess);
/* Determine if it's a delayed close, by flags first */
if ((TypeOfOpen == UserFileOpen || TypeOfOpen == UserDirectoryOpen) &&
(Fcb->State & FCB_STATE_DELAY_CLOSE) &&
!FatGlobalData.ShutdownStarted)
{
DelayedClose = TRUE;
}
/* If close is not delayed, try to perform the close operation */
if (!DelayedClose)
Status = FatiCommonClose(Vcb, Fcb, Ccb, TypeOfOpen, Wait, &VcbDeleted);
/* We have to delay close if either it's defined by a flag or it was not possible
to perform it synchronously */
if (DelayedClose || Status == STATUS_PENDING)
{
DPRINT1("Queuing a pending close, Vcb %p, Fcb %p, Ccb %p\n", Vcb, Fcb, Ccb);
/* Check if a close context should be allocated */
if (TypeOfOpen == VirtualVolumeFile)
{
ASSERT(Vcb->CloseContext != NULL);
CloseContext = Vcb->CloseContext;
Vcb->CloseContext = NULL;
CloseContext->Free = TRUE;
}
else if (TypeOfOpen == DirectoryFile ||
TypeOfOpen == EaFile)
{
UNIMPLEMENTED;
//CloseContext = FatAllocateCloseContext(Vcb);
//ASSERT(CloseContext != NULL);
CloseContext->Free = TRUE;
}
else
{
//TODO: FatDeallocateCcbStrings( Ccb );
/* Set CloseContext to a buffer inside Ccb */
CloseContext = &Ccb->CloseContext;
CloseContext->Free = FALSE;
SetFlag(Ccb->Flags, CCB_CLOSE_CONTEXT);
}
/* Save all info in the close context */
CloseContext->Vcb = Vcb;
CloseContext->Fcb = Fcb;
CloseContext->TypeOfOpen = TypeOfOpen;
/* Queue the close */
FatQueueClose(CloseContext, (BOOLEAN)(Fcb && FlagOn(Fcb->State, FCB_STATE_DELAY_CLOSE)));
}
else
{
/* Close finished right away */
if (TypeOfOpen == VirtualVolumeFile ||
TypeOfOpen == DirectoryFile ||
TypeOfOpen == EaFile)
{
if (TypeOfOpen == VirtualVolumeFile)
{
/* Free close context for the not deleted VCB */
if (!VcbDeleted)
{
CloseContext = Vcb->CloseContext;
Vcb->CloseContext = NULL;
ASSERT(CloseContext != NULL);
}
}
else
{
//CloseContext = FatAllocateCloseContext(Vcb);
DPRINT1("TODO: Allocate close context!\n");
ASSERT(CloseContext != NULL);
}
/* Free close context */
if (CloseContext) ExFreePool(CloseContext);
}
}
/* Complete the request */
FatCompleteRequest(NULL, Irp, Status);
/* Reset the top level IRP if necessary */
if (TopLevel) IoSetTopLevelIrp(NULL);
return Status;
}
NTSTATUS
NTAPI
FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
DPRINT1("FatClose(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
PFAT_IRP_CONTEXT IrpContext;
NTSTATUS Status;
return STATUS_NOT_IMPLEMENTED;
DPRINT("FatClose(DeviceObject %p, Irp %p)\n", DeviceObject, Irp);
/* FatClose works only with a volume device object */
if (DeviceObject == FatGlobalData.DiskDeviceObject)
{
/* Complete the request and return success */
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = FILE_OPENED;
IoCompleteRequest(Irp, IO_DISK_INCREMENT);
return STATUS_SUCCESS;
}
/* Enter FsRtl critical region */
FsRtlEnterFileSystem();
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, TRUE);
/* Call internal function */
Status = FatiClose(IrpContext, Irp);
/* Leave FsRtl critical region */
FsRtlExitFileSystem();
return Status;
}
VOID
NTAPI
FatPendingClose(IN PVCB Vcb OPTIONAL)
{
PCLOSE_CONTEXT CloseContext;
PVCB CurrentVcb = NULL;
PVCB LastVcb = NULL;
BOOLEAN FreeContext;
ULONG Loops = 0;
/* Do the top-level IRP trick */
if (!Vcb) IoSetTopLevelIrp((PIRP)FSRTL_FSP_TOP_LEVEL_IRP);
while ((CloseContext = FatRemoveClose(Vcb, LastVcb)))
{
if (!Vcb)
{
if (!FatGlobalData.ShutdownStarted)
{
if (CloseContext->Vcb != CurrentVcb)
{
Loops = 0;
/* Release previous VCB */
if (CurrentVcb)
ExReleaseResourceLite(&CurrentVcb->Resource);
/* Lock the new VCB */
CurrentVcb = CloseContext->Vcb;
(VOID)ExAcquireResourceExclusiveLite(&CurrentVcb->Resource, TRUE);
}
else
{
/* Try to lock */
if (++Loops >= 20)
{
if (ExGetSharedWaiterCount(&CurrentVcb->Resource) +
ExGetExclusiveWaiterCount(&CurrentVcb->Resource))
{
ExReleaseResourceLite(&CurrentVcb->Resource);
(VOID)ExAcquireResourceExclusiveLite(&CurrentVcb->Resource, TRUE);
}
Loops = 0;
}
}
/* Check open count */
if (CurrentVcb->OpenFileCount <= 1)
{
ExReleaseResourceLite(&CurrentVcb->Resource);
CurrentVcb = NULL;
}
}
else if (CurrentVcb)
{
ExReleaseResourceLite(&CurrentVcb->Resource);
CurrentVcb = NULL;
}
}
LastVcb = CurrentVcb;
/* Remember if we should free the context */
FreeContext = CloseContext->Free;
FatiCommonClose(CloseContext->Vcb,
CloseContext->Fcb,
(FreeContext ? NULL : CONTAINING_RECORD(CloseContext, CCB, CloseContext)),
CloseContext->TypeOfOpen,
TRUE,
NULL);
/* Free context if necessary */
if (FreeContext) ExFreePool(CloseContext);
}
/* Release VCB if necessary */
if (CurrentVcb) ExReleaseResourceLite(&CurrentVcb->Resource);
/* Reset top level IRP */
if (!Vcb) IoSetTopLevelIrp( NULL );
}
VOID
NTAPI
FatCloseWorker(IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context)
{
FsRtlEnterFileSystem();
FatPendingClose((PVCB)Context);
FsRtlExitFileSystem();
}
VOID
NTAPI
FatQueueClose(IN PCLOSE_CONTEXT CloseContext,
IN BOOLEAN DelayClose)
{
BOOLEAN RunWorker = FALSE;
/* Acquire the close lists mutex */
ExAcquireFastMutexUnsafe(&FatCloseQueueMutex);
/* Add it to the desired list */
if (DelayClose)
{
InsertTailList(&FatGlobalData.DelayedCloseList,
&CloseContext->GlobalLinks);
InsertTailList(&CloseContext->Vcb->DelayedCloseList,
&CloseContext->VcbLinks);
FatGlobalData.DelayedCloseCount++;
if (FatGlobalData.DelayedCloseCount > FatMaxDelayedCloseCount &&
!FatGlobalData.AsyncCloseActive)
{
FatGlobalData.AsyncCloseActive = TRUE;
RunWorker = TRUE;
}
}
else
{
InsertTailList(&FatGlobalData.AsyncCloseList,
&CloseContext->GlobalLinks);
InsertTailList(&CloseContext->Vcb->AsyncCloseList,
&CloseContext->VcbLinks);
FatGlobalData.AsyncCloseCount++;
if (!FatGlobalData.AsyncCloseActive)
{
FatGlobalData.AsyncCloseActive = TRUE;
RunWorker = TRUE;
}
}
/* Release the close lists mutex */
ExReleaseFastMutexUnsafe(&FatCloseQueueMutex);
if (RunWorker)
IoQueueWorkItem(FatGlobalData.FatCloseItem, FatCloseWorker, CriticalWorkQueue, NULL);
}
PCLOSE_CONTEXT
NTAPI
FatRemoveClose(PVCB Vcb OPTIONAL,
PVCB LastVcbHint OPTIONAL)
{
PLIST_ENTRY Entry;
PCLOSE_CONTEXT CloseContext;
BOOLEAN IsWorker = FALSE;
/* Acquire the close lists mutex */
ExAcquireFastMutexUnsafe(&FatCloseQueueMutex);
if (!Vcb) IsWorker = TRUE;
if (Vcb == NULL && LastVcbHint != NULL)
{
// TODO: A very special case of overflowing the queue
UNIMPLEMENTED;
}
/* Usual processing from a worker thread */
if (!Vcb)
{
TryToCloseAgain:
/* Is there anything in the async close list */
if (!IsListEmpty(&FatGlobalData.AsyncCloseList))
{
Entry = RemoveHeadList(&FatGlobalData.AsyncCloseList);
FatGlobalData.AsyncCloseCount--;
CloseContext = CONTAINING_RECORD(Entry,
CLOSE_CONTEXT,
GlobalLinks);
RemoveEntryList(&CloseContext->VcbLinks);
} else if (!IsListEmpty(&FatGlobalData.DelayedCloseList) &&
(FatGlobalData.DelayedCloseCount > FatMaxDelayedCloseCount/2 ||
FatGlobalData.ShutdownStarted))
{
/* In case of a shutdown or when delayed queue is filled at half - perform closing */
Entry = RemoveHeadList(&FatGlobalData.DelayedCloseList);
FatGlobalData.DelayedCloseCount--;
CloseContext = CONTAINING_RECORD(Entry,
CLOSE_CONTEXT,
GlobalLinks);
RemoveEntryList(&CloseContext->VcbLinks);
}
else
{
/* Nothing to close */
CloseContext = NULL;
if (IsWorker) FatGlobalData.AsyncCloseActive = FALSE;
}
}
else
{
if (!IsListEmpty(&Vcb->AsyncCloseList))
{
/* Is there anything in the async close list */
Entry = RemoveHeadList(&Vcb->AsyncCloseList);
FatGlobalData.AsyncCloseCount--;
CloseContext = CONTAINING_RECORD(Entry,
CLOSE_CONTEXT,
VcbLinks);
RemoveEntryList(&CloseContext->GlobalLinks);
}
else if (!IsListEmpty(&Vcb->DelayedCloseList))
{
/* Process delayed close list */
Entry = RemoveHeadList(&Vcb->DelayedCloseList);
FatGlobalData.DelayedCloseCount--;
CloseContext = CONTAINING_RECORD(Entry,
CLOSE_CONTEXT,
VcbLinks);
RemoveEntryList(&CloseContext->GlobalLinks);
}
else if (LastVcbHint)
{
/* Try again */
goto TryToCloseAgain;
}
else
{
/* Nothing to close */
CloseContext = NULL;
}
}
/* Release the close lists mutex */
ExReleaseFastMutexUnsafe(&FatCloseQueueMutex);
return CloseContext;
}
/* EOF */
+30 -5
View File
@@ -72,7 +72,9 @@ FatiOpenRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
/* Increment counters */
Dcb->OpenCount++;
Dcb->UncleanCount++;
Vcb->OpenFileCount++;
if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++;
/* Set success statuses */
Iosb.Status = STATUS_SUCCESS;
@@ -186,7 +188,7 @@ FatiOverwriteFile(PFAT_IRP_CONTEXT IrpContext,
CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize);
// TODO: Actually truncate the file
DPRINT1("TODO: Actually truncate the file with a fullfat handle %x\n", Fcb->FatHandle);
DPRINT1("TODO: Actually truncate file '%wZ' with a fullfat handle %x\n", &Fcb->FullFileName, Fcb->FatHandle);
/* Release the paging resource */
ExReleaseResourceLite(Fcb->Header.PagingIoResource);
@@ -288,6 +290,12 @@ FatiOpenExistingDir(IN PFAT_IRP_CONTEXT IrpContext,
Fcb,
FatCreateCcb());
/* Increase counters */
Fcb->UncleanCount++;
Fcb->OpenCount++;
Vcb->OpenFileCount++;
if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++;
Iosb.Status = STATUS_SUCCESS;
Iosb.Information = FILE_OPENED;
@@ -319,6 +327,7 @@ FatiOpenExistingFile(IN PFAT_IRP_CONTEXT IrpContext,
PFCB Fcb;
NTSTATUS Status;
FF_FILE *FileHandle;
FF_ERROR FfError;
/* Check for create file option and fail */
if (CreateDisposition == FILE_CREATE)
@@ -341,20 +350,22 @@ FatiOpenExistingFile(IN PFAT_IRP_CONTEXT IrpContext,
}
/* Open the file with FullFAT */
FileHandle = FF_Open(Vcb->Ioman, AnsiName.Buffer, FF_MODE_READ, NULL);
FileHandle = FF_Open(Vcb->Ioman, AnsiName.Buffer, FF_MODE_READ, &FfError);
if (!FileHandle)
{
DPRINT1("Failed to open file '%s', error %ld\n", AnsiName.Buffer, FfError);
Iosb.Status = STATUS_OBJECT_NAME_NOT_FOUND; // FIXME: A shortcut for now
return Iosb;
}
DPRINT1("Succeeded opening file '%s'\n", AnsiName.Buffer);
/* Create a new FCB for this file */
Fcb = FatCreateFcb(IrpContext, Vcb, ParentDcb, FileHandle);
// TODO: Check if overwrite is needed
// This is usual file open branch, without overwriting!
// TODO: This is usual file open branch, without overwriting!
/* Set context and section object pointers */
FatSetFileObject(FileObject,
UserFileOpen,
@@ -365,6 +376,13 @@ FatiOpenExistingFile(IN PFAT_IRP_CONTEXT IrpContext,
Iosb.Status = STATUS_SUCCESS;
Iosb.Information = FILE_OPENED;
/* Increase counters */
Fcb->UncleanCount++;
Fcb->OpenCount++;
if (FlagOn(FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) Fcb->NonCachedUncleanCount++;
if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++;
return Iosb;
}
@@ -397,7 +415,7 @@ FatiOpenVolume(IN PFAT_IRP_CONTEXT IrpContext,
// and opened handles count is not 0
//if (!FlagOn(ShareAccess, FILE_SHARE_READ)
DPRINT1("Exclusive voume open\n");
DPRINT1("Exclusive volume open\n");
// TODO: Flush the volume
VolumeFlushed = TRUE;
@@ -450,6 +468,7 @@ FatiOpenVolume(IN PFAT_IRP_CONTEXT IrpContext,
/* Increase direct open count */
Vcb->DirectOpenCount++;
Vcb->OpenFileCount++;
if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++;
/* Set no buffering flag */
FileObject->Flags |= FO_NO_INTERMEDIATE_BUFFERING;
@@ -720,7 +739,7 @@ FatiCreate(IN PFAT_IRP_CONTEXT IrpContext,
/* Set parent DCB */
ParentDcb = RelatedDcb;
DPRINT1("Opening file '%wZ' relatively to '%wZ'\n", &FileName, &ParentDcb->FullFileName);
DPRINT("Opening file '%wZ' relatively to '%wZ'\n", &FileName, &ParentDcb->FullFileName);
}
else
{
@@ -1137,6 +1156,12 @@ FatiCreate(IN PFAT_IRP_CONTEXT IrpContext,
DeleteOnClose,
OpenedAsDos);
/* In case of success set cache supported flag */
if (NT_SUCCESS(Iosb.Status) && !NoIntermediateBuffering)
{
SetFlag(FileObject->Flags, FO_CACHE_SUPPORTED);
}
Irp->IoStatus.Information = Iosb.Information;
/* Unlock VCB */
+91 -12
View File
@@ -82,9 +82,6 @@ FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
ExInitializeFastMutex(&Dcb->HeaderMutex);
FsRtlSetupAdvancedHeader(&Dcb->Header, &Dcb->HeaderMutex);
/* Initialize MCB */
FsRtlInitializeLargeMcb(&Dcb->Mcb, NonPagedPool);
/* Set up first cluster field depending on FAT type */
if (TRUE/*FatIsFat32(Vcb)*/)
{
@@ -114,13 +111,6 @@ FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
#endif
UNIMPLEMENTED;
}
/* Initialize free dirent bitmap */
RtlInitializeBitMap(&Dcb->Dcb.FreeBitmap, NULL, 0);
/* Fill the dirent bitmap */
DPRINT1("Filling the free dirent bitmap is missing\n");
//FatCheckFreeDirentBitmap( IrpContext, Dcb );
}
PFCB
@@ -191,9 +181,98 @@ FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext,
IN BOOLEAN DeleteOnClose)
{
IO_STATUS_BLOCK Iosb = {{0}};
PCCB Ccb;
Iosb.Status = STATUS_NOT_IMPLEMENTED;
UNIMPLEMENTED;
/* Exclusively lock this FCB */
FatAcquireExclusiveFcb(IrpContext, Dcb);
/* Check if it's a delete-on-close of a root DCB */
if (FatNodeType(Dcb) == FAT_NTC_ROOT_DCB && DeleteOnClose)
{
Iosb.Status = STATUS_CANNOT_DELETE;
/* Release the lock and return */
FatReleaseFcb(IrpContext, Dcb);
return Iosb;
}
/*if (NoEaKnowledge && NodeType(Dcb) != FAT_NTC_ROOT_DCB &&
!FatIsFat32(Vcb))
{
UNIMPLEMENTED;
}*/
/* Check the create disposition and desired access */
if ((CreateDisposition != FILE_OPEN) &&
(CreateDisposition != FILE_OPEN_IF))
{
Iosb.Status = STATUS_OBJECT_NAME_COLLISION;
/* Release the lock and return */
FatReleaseFcb(IrpContext, Dcb);
return Iosb;
}
#if 0
if (!FatCheckFileAccess(IrpContext,
Dcb->DirentFatFlags,
DesiredAccess))
{
Iosb.Status = STATUS_ACCESS_DENIED;
try_return( Iosb );
}
#endif
/* If it's already opened - check share access */
if (Dcb->OpenCount > 0)
{
Iosb.Status = IoCheckShareAccess(*DesiredAccess,
ShareAccess,
FileObject,
&Dcb->ShareAccess,
TRUE);
if (!NT_SUCCESS(Iosb.Status))
{
/* Release the lock and return */
FatReleaseFcb(IrpContext, Dcb);
return Iosb;
}
}
else
{
IoSetShareAccess(*DesiredAccess,
ShareAccess,
FileObject,
&Dcb->ShareAccess);
}
/* Set the file object */
Ccb = FatCreateCcb(IrpContext);
FatSetFileObject(FileObject,
UserDirectoryOpen,
Dcb,
Ccb);
/* Increase counters */
Dcb->UncleanCount++;
Dcb->OpenCount++;
Vcb->OpenFileCount++;
if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++;
/* Set delete on close */
if (DeleteOnClose)
SetFlag(Ccb->Flags, CCB_DELETE_ON_CLOSE);
/* Clear delay close flag */
ClearFlag(Dcb->State, FCB_STATE_DELAY_CLOSE);
/* That's it */
Iosb.Status = STATUS_SUCCESS;
Iosb.Information = FILE_OPENED;
/* Release the lock */
FatReleaseFcb(IrpContext, Dcb);
return Iosb;
}
+50 -1
View File
@@ -14,6 +14,7 @@
/* GLOBALS ******************************************************************/
FAT_GLOBAL_DATA FatGlobalData;
FAST_MUTEX FatCloseQueueMutex;
/* FUNCTIONS ****************************************************************/
@@ -42,6 +43,7 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
RtlZeroMemory(&FatGlobalData, sizeof(FAT_GLOBAL_DATA));
FatGlobalData.DriverObject = DriverObject;
FatGlobalData.DiskDeviceObject = DeviceObject;
FatGlobalData.SystemProcess = PsGetCurrentProcess();
/* Fill major function handlers */
DriverObject->MajorFunction[IRP_MJ_CLOSE] = FatClose;
@@ -108,6 +110,12 @@ DriverEntry(PDRIVER_OBJECT DriverObject,
/* Initialize synchronization resource for the global data */
ExInitializeResourceLite(&FatGlobalData.Resource);
/* Initialize queued close stuff */
InitializeListHead(&FatGlobalData.AsyncCloseList);
InitializeListHead(&FatGlobalData.DelayedCloseList);
FatGlobalData.FatCloseItem = IoAllocateWorkItem(DeviceObject);
ExInitializeFastMutex(&FatCloseQueueMutex);
/* Initialize global VCB list */
InitializeListHead(&FatGlobalData.VcbListHead);
@@ -317,7 +325,7 @@ FatDecodeFileObject(IN PFILE_OBJECT FileObject,
TypeOfOpen = (*Ccb == NULL ? DirectoryFile : UserDirectoryOpen);
DPRINT1("Referencing a directory: %wZ\n", &(*FcbOrDcb)->FullFileName);
DPRINT("Referencing a directory: %wZ\n", &(*FcbOrDcb)->FullFileName);
break;
/* File */
@@ -510,4 +518,45 @@ FatMapUserBuffer(PIRP Irp)
return MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
}
BOOLEAN
NTAPI
FatIsTopLevelIrp(IN PIRP Irp)
{
if (!IoGetTopLevelIrp())
{
IoSetTopLevelIrp(Irp);
return TRUE;
}
return FALSE;
}
VOID
NTAPI
FatNotifyReportChange(IN PFAT_IRP_CONTEXT IrpContext,
IN PVCB Vcb,
IN PFCB Fcb,
IN ULONG Filter,
IN ULONG Action)
{
if (Fcb->FullFileName.Buffer == NULL)
FatSetFullFileNameInFcb(IrpContext, Fcb);
ASSERT(Fcb->FullFileName.Length != 0 );
ASSERT(Fcb->FileNameLength != 0 );
ASSERT(Fcb->FullFileName.Length > Fcb->FileNameLength );
ASSERT(Fcb->FullFileName.Buffer[(Fcb->FullFileName.Length - Fcb->FileNameLength)/sizeof(WCHAR) - 1] == L'\\' );
FsRtlNotifyFullReportChange(Vcb->NotifySync,
&Vcb->NotifyList,
(PSTRING)&Fcb->FullFileName,
(USHORT)(Fcb->FullFileName.Length -
Fcb->FileNameLength),
NULL,
NULL,
Filter,
Action,
NULL);
}
/* EOF */
+55
View File
@@ -16,6 +16,7 @@
#define TAG_FCB 'BCFV'
#define TAG_IRP 'PRIV'
#define TAG_VFAT 'TAFV'
#define TAG_FSD_CLOSE_CONTEXT 'CLCV'
/* Global resource acquire/release */
@@ -36,6 +37,34 @@
ExReleaseResourceLite(&(FatGlobalData.Resource)); \
}
#define FatIsFastIoPossible(FCB) ((BOOLEAN) \
(((FCB)->Condition != FcbGood || !FsRtlOplockIsFastIoPossible(&(FCB)->Fcb.Oplock)) ? \
FastIoIsNotPossible \
: \
(!FsRtlAreThereCurrentFileLocks(&(FCB)->Fcb.Lock) && \
((FCB)->OutstandingAsyncWrites == 0) && \
!FlagOn((FCB)->Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED) ? \
FastIoIsPossible \
: \
FastIoIsQuestionable \
) \
) \
)
#define IsFileObjectReadOnly(FO) (!((FO)->WriteAccess | (FO)->DeleteAccess))
#define IsFileDeleted(FCB) (FlagOn((FCB)->State, FCB_STATE_DELETE_ON_CLOSE) && ((FCB)->UncleanCount == 0))
BOOLEAN
FORCEINLINE
FatIsIoRangeValid(IN LARGE_INTEGER Start, IN ULONG Length)
{
/* Check if it's more than 32bits, or if the length causes 32bit overflow.
FAT-specific! */
return !(Start.HighPart || Start.LowPart + Length < Start.LowPart);
}
NTSYSAPI
NTSTATUS
NTAPI
@@ -67,6 +96,12 @@ FatReadStreamFile(PVCB Vcb,
PBCB *Bcb,
PVOID *Buffer);
BOOLEAN
NTAPI
FatCheckForDismount(IN PFAT_IRP_CONTEXT IrpContext,
PVCB Vcb,
IN BOOLEAN Force);
/* ----------------------------------------------------------- dir.c */
NTSTATUS NTAPI
@@ -149,6 +184,8 @@ FatNoopRelease(IN PVOID Context);
/* --------------------------------------------------------- fastfat.c */
extern FAST_MUTEX FatCloseQueueMutex;
PFAT_IRP_CONTEXT NTAPI
FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait);
@@ -205,6 +242,16 @@ FatSetFileObject(PFILE_OBJECT FileObject,
PVOID FASTCALL
FatMapUserBuffer(PIRP Irp);
BOOLEAN NTAPI
FatIsTopLevelIrp(IN PIRP Irp);
VOID NTAPI
FatNotifyReportChange(IN PFAT_IRP_CONTEXT IrpContext,
IN PVCB Vcb,
IN PFCB Fcb,
IN ULONG Filter,
IN ULONG Action);
/* --------------------------------------------------------- fullfat.c */
FF_T_SINT32
@@ -284,6 +331,10 @@ FatCreateFcb(
IN PFCB ParentDcb,
IN FF_FILE *FileHandle);
VOID NTAPI
FatDeleteFcb(IN PFAT_IRP_CONTEXT IrpContext,
IN PFCB Fcb);
IO_STATUS_BLOCK NTAPI
FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext,
IN PFILE_OBJECT FileObject,
@@ -319,6 +370,10 @@ FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext,
PCCB NTAPI
FatCreateCcb();
VOID NTAPI
FatDeleteCcb(IN PFAT_IRP_CONTEXT IrpContext,
IN PCCB Ccb);
VOID NTAPI
FatSetFullNameInFcb(PFCB Fcb,
PUNICODE_STRING Name);
+11
View File
@@ -163,6 +163,10 @@ FatInitializeVcb(IN PFAT_IRP_CONTEXT IrpContext,
/* Initialize VCB's resource */
ExInitializeResourceLite(&Vcb->Resource);
/* Initialize close queue lists */
InitializeListHead(&Vcb->AsyncCloseList);
InitializeListHead(&Vcb->DelayedCloseList);
/* Initialize CC */
CcInitializeCacheMap(Vcb->StreamFileObject,
(PCC_FILE_SIZES)&Vcb->Header.AllocationSize,
@@ -201,6 +205,10 @@ FatInitializeVcb(IN PFAT_IRP_CONTEXT IrpContext,
goto FatInitializeVcbCleanup;
}
/* Increase internal / residual open counter */
InterlockedIncrement((PLONG)&(Vcb->InternalOpenCount));
InterlockedIncrement((PLONG)&(Vcb->ResidualOpenCount));
/* Set up notifications */
FsRtlNotifyInitializeSync(&Vcb->NotifySync);
InitializeListHead(&Vcb->NotifyList);
@@ -239,6 +247,9 @@ FatUninitializeVcb(IN PVCB Vcb)
Vcb->StreamFileObject = NULL;
}
/* Free ContextClose if it's not freed up already */
if (Vcb->CloseContext) ExFreePool(Vcb->CloseContext);
/* Free notifications stuff */
FsRtlNotifyUninitializeSync(&Vcb->NotifySync);
+78 -30
View File
@@ -14,15 +14,17 @@ typedef FAT_NODE_TYPE *PFAT_NODE_TYPE;
#define FatNodeType(Ptr) (*((PFAT_NODE_TYPE)(Ptr)))
/* Node type codes */
#define FAT_NTC_VCB (CSHORT) '00VF'
#define FAT_NTC_FCB (CSHORT) 'CF'
#define FAT_NTC_DCB (CSHORT) 'DF'
#define FAT_NTC_ROOT_DCB (CSHORT) 'RFD'
#define FAT_NTC_CCB (CSHORT) 'BCC'
#define FAT_NTC_VCB (CSHORT) '00VF'
#define FAT_NTC_FCB (CSHORT) 'CF'
#define FAT_NTC_DCB (CSHORT) 'DF'
#define FAT_NTC_ROOT_DCB (CSHORT) 'RFD'
#define FAT_NTC_CCB (CSHORT) 'BCC'
#define FAT_NTC_IRP_CONTEXT (CSHORT) 'PRI'
typedef struct _FAT_GLOBAL_DATA
{
ERESOURCE Resource;
PEPROCESS SystemProcess;
PDRIVER_OBJECT DriverObject;
PDEVICE_OBJECT DiskDeviceObject;
LIST_ENTRY VcbListHead;
@@ -33,9 +35,20 @@ typedef struct _FAT_GLOBAL_DATA
CACHE_MANAGER_CALLBACKS CacheMgrCallbacks;
CACHE_MANAGER_CALLBACKS CacheMgrNoopCallbacks;
BOOLEAN Win31FileSystem;
BOOLEAN ShutdownStarted;
/* Jan 1, 1980 System Time */
LARGE_INTEGER DefaultFileTime;
/* Queued close */
ULONG AsyncCloseCount;
ULONG DelayedCloseCount;
LIST_ENTRY AsyncCloseList;
LIST_ENTRY DelayedCloseList;
PIO_WORKITEM FatCloseItem;
/* Various flags */
BOOLEAN AsyncCloseActive;
/* FullFAT integration */
FF_IOMAN *Ioman;
FF_ERROR FF_Error;
@@ -82,6 +95,10 @@ typedef struct _FAT_PAGE_CONTEXT
typedef struct _FAT_IRP_CONTEXT
{
/* Type and size of this record (must be FAT_NTC_IRP_CONTEXT) */
FAT_NODE_TYPE NodeTypeCode;
CSHORT NodeByteSize;
PIRP Irp;
PDEVICE_OBJECT DeviceObject;
UCHAR MajorFunction;
@@ -132,10 +149,15 @@ typedef struct _FAT_METHODS {
PFAT_SETFAT_VALUE_RUN_ROUTINE SetValueRun;
} FAT_METHODS, *PFAT_METHODS;
#define VCB_STATE_FLAG_LOCKED 0x01
#define VCB_STATE_FLAG_DIRTY 0x02
#define VCB_STATE_MOUNTED_DIRTY 0x04
#define VCB_STATE_CREATE_IN_PROGRESS 0x08
#define VCB_STATE_FLAG_LOCKED 0x001
#define VCB_STATE_FLAG_DIRTY 0x002
#define VCB_STATE_MOUNTED_DIRTY 0x004
#define VCB_STATE_CREATE_IN_PROGRESS 0x008
#define VCB_STATE_FLAG_CLOSE_IN_PROGRESS 0x010
#define VCB_STATE_FLAG_DELETED_FCB 0x020
#define VCB_STATE_FLAG_DISMOUNT_IN_PROGRESS 0x040
#define VCB_STATE_FLAG_DEFERRED_FLUSH 0x080
#define VCB_STATE_FLAG_WRITE_PROTECTED 0x100
typedef enum _VCB_CONDITION
{
@@ -158,10 +180,13 @@ typedef struct _VCB
ULONG State;
VCB_CONDITION Condition;
ERESOURCE Resource;
struct _CLOSE_CONTEXT *CloseContext;
LIST_ENTRY AsyncCloseList;
LIST_ENTRY DelayedCloseList;
/* Direct volume access */
ULONG DirectOpenCount;
SHARE_ACCESS ShareAccess;
PFILE_OBJECT FileObjectWithVcbLocked;
/* Notifications support */
PNOTIFY_SYNC NotifySync;
@@ -186,8 +211,13 @@ typedef struct _VCB
struct _FCB *RootDcb;
/* Counters */
ULONG MediaChangeCount;
ULONG DirectOpenCount;
ULONG OpenFileCount;
ULONG ReadOnlyCount;
ULONG InternalOpenCount;
ULONG ResidualOpenCount;
ULONG DirectAccessOpenCount;
ULONG MediaChangeCount;
/* FullFAT integration */
FF_IOMAN *Ioman;
@@ -221,6 +251,18 @@ typedef struct _VOLUME_DEVICE_OBJECT
VCB Vcb; /* Must be the last entry! */
};
} VOLUME_DEVICE_OBJECT, *PVOLUME_DEVICE_OBJECT;
typedef enum _TYPE_OF_OPEN
{
UnopenedFileObject,
UserFileOpen,
UserDirectoryOpen,
UserVolumeOpen,
VirtualVolumeFile,
DirectoryFile,
EaFile
} TYPE_OF_OPEN;
//
// Short name always exists in FAT
//
@@ -252,6 +294,7 @@ typedef enum _FCB_CONDITION
#define FCB_STATE_PAGEFILE 0x04
#define FCB_STATE_DELAY_CLOSE 0x08
#define FCB_STATE_TRUNCATE_ON_CLOSE 0x10
#define FCB_STATE_DELETE_ON_CLOSE 0x20
typedef struct _FCB
{
@@ -281,8 +324,6 @@ typedef struct _FCB
FCB_CONDITION Condition;
/* Share access */
SHARE_ACCESS ShareAccess;
/* Mcb mapping Vbo->Lbo */
LARGE_MCB Mcb;
ULONG FirstCluster;
/* Links into FCB Tree */
FCB_NAME_LINK ShortName;
@@ -307,6 +348,8 @@ typedef struct _FCB
PKEVENT OutstandingAsyncEvent;
/* Counters */
ULONG OpenCount;
ULONG UncleanCount;
ULONG NonCachedUncleanCount;
union
{
struct
@@ -318,12 +361,11 @@ typedef struct _FCB
struct
{
/* A list of all FCBs/DCBs opened under this DCB */
LIST_ENTRY ParentDcbList;
LIST_ENTRY ParentDcbList; /* A list of all FCBs/DCBs opened under this DCB */
ULONG DirectoryFileOpenCount; /* Sector-based access to the dir */
PFILE_OBJECT DirectoryFile;
/* Directory data stream (just handy to have it). */
PFILE_OBJECT StreamFileObject;
/* Bitmap to search for free dirents. */
RTL_BITMAP FreeBitmap;
//PFILE_OBJECT StreamFileObject;
/* Names */
PRTL_SPLAY_LINKS SplayLinksAnsi;
PRTL_SPLAY_LINKS SplayLinksUnicode;
@@ -368,6 +410,17 @@ typedef struct _FAT_FIND_DIRENT_CONTEXT
BOOLEAN Valid8dot3Name;
} FAT_FIND_DIRENT_CONTEXT, *PFAT_FIND_DIRENT_CONTEXT;
typedef struct _CLOSE_CONTEXT
{
LIST_ENTRY GlobalLinks;
LIST_ENTRY VcbLinks;
PVCB Vcb;
PFCB Fcb;
TYPE_OF_OPEN TypeOfOpen;
BOOLEAN Free;
} CLOSE_CONTEXT, *PCLOSE_CONTEXT;
typedef struct _CCB
{
CSHORT NodeTypeCode;
@@ -377,19 +430,9 @@ typedef struct _CCB
ULONG Entry;
UNICODE_STRING SearchPattern;
UCHAR Flags;
CLOSE_CONTEXT CloseContext;
} CCB, *PCCB;
typedef enum _TYPE_OF_OPEN
{
UnopenedFileObject,
UserFileOpen,
UserDirectoryOpen,
UserVolumeOpen,
VirtualVolumeFile,
DirectoryFile,
EaFile
} TYPE_OF_OPEN;
typedef enum _FILE_TIME_INDEX
{
FileCreationTime = 0,
@@ -401,5 +444,10 @@ typedef enum _FILE_TIME_INDEX
#define CCB_SEARCH_RETURN_SINGLE_ENTRY 0x01
#define CCB_SEARCH_PATTERN_LEGAL_8DOT3 0x02
#define CCB_SEARCH_PATTERN_HAS_WILD_CARD 0x04
#define CCB_DASD_IO 0x10
#define CCB_DASD_IO 0x08
#define CCB_READ_ONLY 0x10
#define CCB_DELETE_ON_CLOSE 0x20
#define CCB_COMPLETE_DISMOUNT 0x40
#define CCB_CLOSE_CONTEXT 0x80
extern FAT_GLOBAL_DATA FatGlobalData;
+76
View File
@@ -149,12 +149,74 @@ FatCreateFcb(IN PFAT_IRP_CONTEXT IrpContext,
Fcb->Header.ValidDataLength.LowPart = FileHandle->Filesize;
Fcb->FatHandle = FileHandle;
/* Initialize locks */
FsRtlInitializeFileLock(&Fcb->Fcb.Lock, NULL, NULL);
FsRtlInitializeOplock(&Fcb->Fcb.Oplock);
/* Set names */
FatSetFcbNames(IrpContext, Fcb);
return Fcb;
}
VOID
NTAPI
FatDeleteFcb(IN PFAT_IRP_CONTEXT IrpContext,
IN PFCB Fcb)
{
DPRINT("FatDeleteFcb %p\n", Fcb);
if (Fcb->OpenCount != 0)
{
DPRINT1("Trying to delete FCB with OpenCount %d\n", Fcb->OpenCount);
ASSERT(FALSE);
}
if ((Fcb->Header.NodeTypeCode == FAT_NTC_DCB) ||
(Fcb->Header.NodeTypeCode == FAT_NTC_ROOT_DCB))
{
/* Make sure it's a valid deletion */
ASSERT(Fcb->Dcb.DirectoryFileOpenCount == 0);
ASSERT(IsListEmpty(&Fcb->Dcb.ParentDcbList));
ASSERT(Fcb->Dcb.DirectoryFile == NULL);
}
else
{
/* Free locks */
FsRtlUninitializeFileLock(&Fcb->Fcb.Lock);
FsRtlUninitializeOplock(&Fcb->Fcb.Oplock);
}
/* Release any possible filter contexts */
FsRtlTeardownPerStreamContexts(&Fcb->Header);
/* Remove from parents queue */
if (Fcb->Header.NodeTypeCode != FAT_NTC_ROOT_DCB)
{
RemoveEntryList(&(Fcb->ParentDcbLinks));
}
/* Free FullFAT handle */
if (Fcb->FatHandle) FF_Close(Fcb->FatHandle);
/* Remove from the splay table */
if (FlagOn(Fcb->State, FCB_STATE_HAS_NAMES))
FatRemoveNames(IrpContext, Fcb);
/* Free file name buffers */
if (Fcb->Header.NodeTypeCode != FAT_NTC_ROOT_DCB)
{
if (Fcb->FullFileName.Buffer)
ExFreePool(Fcb->FullFileName.Buffer);
}
if (Fcb->ExactCaseLongName.Buffer)
ExFreePool(Fcb->ExactCaseLongName.Buffer);
/* Free this FCB, finally */
ExFreePool(Fcb);
}
PCCB
NTAPI
FatCreateCcb()
@@ -172,6 +234,17 @@ FatCreateCcb()
return Ccb;
}
VOID
NTAPI
FatDeleteCcb(IN PFAT_IRP_CONTEXT IrpContext,
IN PCCB Ccb)
{
// TODO: Deallocate CCB strings, if any
/* Free the CCB */
ExFreePool(Ccb);
}
IO_STATUS_BLOCK
NTAPI
FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext,
@@ -443,8 +516,11 @@ SuccComplete:
ClearFlag(Fcb->State, FCB_STATE_DELAY_CLOSE);
/* Increase counters */
Fcb->UncleanCount++;
Fcb->OpenCount++;
Vcb->OpenFileCount++;
if (IsFileObjectReadOnly(FileObject)) Vcb->ReadOnlyCount++;
if (FlagOn(FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) Fcb->NonCachedUncleanCount++;
// TODO: Handle DeleteOnClose and OpenedAsDos by storing those flags in CCB
}
+385 -7
View File
@@ -263,11 +263,7 @@ FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
FsRtlEnterFileSystem();
/* Set Top Level IRP if not set */
if (IoGetTopLevelIrp() == NULL)
{
IoSetTopLevelIrp(Irp);
TopLevel = TRUE;
}
TopLevel = FatIsTopLevelIrp(Irp);
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, CanWait);
@@ -284,12 +280,394 @@ FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
return Status;
}
NTSTATUS
NTAPI
FatSetEndOfFileInfo(IN PFAT_IRP_CONTEXT IrpContext,
IN PIRP Irp,
IN PFILE_OBJECT FileObject,
IN PVCB Vcb,
IN PFCB Fcb)
{
PFILE_END_OF_FILE_INFORMATION Buffer;
ULONG NewFileSize;
ULONG InitialFileSize;
ULONG InitialValidDataLength;
//ULONG InitialValidDataToDisk;
BOOLEAN CacheMapInitialized = FALSE;
BOOLEAN ResourceAcquired = FALSE;
NTSTATUS Status;
Buffer = Irp->AssociatedIrp.SystemBuffer;
if (FatNodeType(Fcb) != FAT_NTC_FCB)
{
/* Trying to change size of a dir */
Status = STATUS_INVALID_DEVICE_REQUEST;
return Status;
}
/* Validate new size */
if (!FatIsIoRangeValid(Buffer->EndOfFile, 0))
{
Status = STATUS_DISK_FULL;
return Status;
}
NewFileSize = Buffer->EndOfFile.LowPart;
/* Lookup allocation size if needed */
if (Fcb->Header.AllocationSize.QuadPart == (LONGLONG)-1)
UNIMPLEMENTED;//FatLookupFileAllocationSize(IrpContext, Fcb);
/* Cache the file if there is a data section */
if (FileObject->SectionObjectPointer->DataSectionObject &&
(FileObject->SectionObjectPointer->SharedCacheMap == NULL) &&
!FlagOn(Irp->Flags, IRP_PAGING_IO))
{
if (FlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE))
{
/* This is a really weird condition */
UNIMPLEMENTED;
//Raise(STATUS_FILE_CLOSED);
}
/* Initialize the cache map */
CcInitializeCacheMap(FileObject,
(PCC_FILE_SIZES)&Fcb->Header.AllocationSize,
FALSE,
&FatGlobalData.CacheMgrCallbacks,
Fcb);
CacheMapInitialized = TRUE;
}
/* Lazy write case */
if (IoGetCurrentIrpStackLocation(Irp)->Parameters.SetFile.AdvanceOnly)
{
if (!IsFileDeleted(Fcb) &&
(Fcb->Condition == FcbGood))
{
/* Clamp the new file size */
if (NewFileSize >= Fcb->Header.FileSize.LowPart)
NewFileSize = Fcb->Header.FileSize.LowPart;
ASSERT(NewFileSize <= Fcb->Header.AllocationSize.LowPart);
/* Never reduce the file size here! */
// TODO: Actually change file size
DPRINT1("Actually changing file size is missing\n");
/* Notify about file size change */
FatNotifyReportChange(IrpContext,
Vcb,
Fcb,
FILE_NOTIFY_CHANGE_SIZE,
FILE_ACTION_MODIFIED);
}
else
{
DPRINT1("Cannot set size on deleted file\n");
}
Status = STATUS_SUCCESS;
return Status;
}
if ( NewFileSize > Fcb->Header.AllocationSize.LowPart )
{
// TODO: Increase file size
DPRINT1("Actually changing file size is missing\n");
}
if (Fcb->Header.FileSize.LowPart != NewFileSize)
{
if (NewFileSize < Fcb->Header.FileSize.LowPart)
{
if (!MmCanFileBeTruncated(FileObject->SectionObjectPointer,
&Buffer->EndOfFile))
{
Status = STATUS_USER_MAPPED_FILE;
/* Free up resources if necessary */
if (CacheMapInitialized)
CcUninitializeCacheMap(FileObject, NULL, NULL);
return Status;
}
ResourceAcquired = ExAcquireResourceExclusiveLite(Fcb->Header.PagingIoResource, TRUE);
}
/* Set new file sizes */
InitialFileSize = Fcb->Header.FileSize.LowPart;
InitialValidDataLength = Fcb->Header.ValidDataLength.LowPart;
//InitialValidDataToDisk = Fcb->ValidDataToDisk;
Fcb->Header.FileSize.LowPart = NewFileSize;
/* Adjust valid data length if new size is less than that */
if (Fcb->Header.ValidDataLength.LowPart > NewFileSize)
Fcb->Header.ValidDataLength.LowPart = NewFileSize;
//if (Fcb->ValidDataToDisk > NewFileSize)
// Fcb->ValidDataToDisk = NewFileSize;
DPRINT1("New file size is 0x%08lx\n", NewFileSize);
/* Update cache mapping */
CcSetFileSizes(FileObject,
(PCC_FILE_SIZES)&Fcb->Header.AllocationSize);
/* Notify about size change */
FatNotifyReportChange(IrpContext,
Vcb,
Fcb,
FILE_NOTIFY_CHANGE_SIZE,
FILE_ACTION_MODIFIED);
/* Set truncate on close flag */
SetFlag(Fcb->State, FCB_STATE_TRUNCATE_ON_CLOSE);
}
/* Set modified flag */
FileObject->Flags |= FO_FILE_MODIFIED;
/* Free up resources if necessary */
if (CacheMapInitialized)
CcUninitializeCacheMap(FileObject, NULL, NULL);
if (ResourceAcquired)
ExReleaseResourceLite(Fcb->Header.PagingIoResource);
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
FatiSetInformation(IN PFAT_IRP_CONTEXT IrpContext,
IN PIRP Irp)
{
PFILE_OBJECT FileObject;
PIO_STACK_LOCATION IrpSp;
FILE_INFORMATION_CLASS InfoClass;
TYPE_OF_OPEN TypeOfOpen;
PVCB Vcb;
PFCB Fcb;
PCCB Ccb;
LONG Length;
PVOID Buffer;
NTSTATUS Status = STATUS_SUCCESS;
BOOLEAN VcbAcquired = FALSE, FcbAcquired = FALSE;
/* Get IRP stack location */
IrpSp = IoGetCurrentIrpStackLocation(Irp);
/* Get the file object */
FileObject = IrpSp->FileObject;
/* Copy variables to something with shorter names */
InfoClass = IrpSp->Parameters.SetFile.FileInformationClass;
Length = IrpSp->Parameters.SetFile.Length;
Buffer = Irp->AssociatedIrp.SystemBuffer;
DPRINT("FatiSetInformation\n", 0);
DPRINT("\tIrp = %08lx\n", Irp);
DPRINT("\tLength = %08lx\n", Length);
DPRINT("\tFileInformationClass = %08lx\n", InfoClass);
DPRINT("\tFileObject = %08lx\n", IrpSp->Parameters.SetFile.FileObject);
DPRINT("\tBuffer = %08lx\n", Buffer);
TypeOfOpen = FatDecodeFileObject(FileObject, &Vcb, &Fcb, &Ccb);
DPRINT("Vcb %p, Fcb %p, Ccb %p, open type %d\n", Vcb, Fcb, Ccb, TypeOfOpen);
switch (TypeOfOpen)
{
case UserVolumeOpen:
Status = STATUS_INVALID_PARAMETER;
/* Complete request and return status */
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
case UserFileOpen:
/* Check oplocks */
if (!FlagOn(Fcb->State, FCB_STATE_PAGEFILE) &&
((InfoClass == FileEndOfFileInformation) ||
(InfoClass == FileAllocationInformation)))
{
Status = FsRtlCheckOplock(&Fcb->Fcb.Oplock,
Irp,
IrpContext,
NULL,
NULL);
if (Status != STATUS_SUCCESS)
{
/* Complete request and return status */
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
}
/* Update Fast IO flag */
Fcb->Header.IsFastIoPossible = FatIsFastIoPossible(Fcb);
}
break;
case UserDirectoryOpen:
break;
default:
Status = STATUS_INVALID_PARAMETER;
/* Complete request and return status */
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
}
/* If it's a root DCB - fail */
if (FatNodeType(Fcb) == FAT_NTC_ROOT_DCB)
{
if (InfoClass == FileDispositionInformation)
Status = STATUS_CANNOT_DELETE;
else
Status = STATUS_INVALID_PARAMETER;
/* Complete request and return status */
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
}
/* Acquire the volume lock if needed */
if (InfoClass == FileDispositionInformation ||
InfoClass == FileRenameInformation)
{
if (!FatAcquireExclusiveVcb(IrpContext, Vcb))
{
UNIMPLEMENTED;
}
VcbAcquired = TRUE;
}
/* Acquire FCB lock */
if (!FlagOn(Fcb->State, FCB_STATE_PAGEFILE))
{
if (!FatAcquireExclusiveFcb(IrpContext, Fcb))
{
UNIMPLEMENTED;
}
FcbAcquired = TRUE;
}
// TODO: VerifyFcb
switch (InfoClass)
{
case FileBasicInformation:
//Status = FatSetBasicInfo(IrpContext, Irp, Fcb, Ccb);
DPRINT1("FileBasicInformation\n");
break;
case FileDispositionInformation:
if (FlagOn(Vcb->State, VCB_STATE_FLAG_DEFERRED_FLUSH) &&
!FlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT))
{
UNIMPLEMENTED;
}
else
{
//Status = FatSetDispositionInfo(IrpContext, Irp, FileObject, Fcb);
DPRINT1("FileDispositionInformation\n");
}
break;
case FileRenameInformation:
if (!FlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT))
{
UNIMPLEMENTED;
}
else
{
//Status = FatSetRenameInfo(IrpContext, Irp, Vcb, Fcb, Ccb);
DPRINT1("FileRenameInformation\n");
/* NOTE: Request must not be completed here!
That's why Irp/IrpContext are set to NULL */
if (Status == STATUS_PENDING)
{
Irp = NULL;
IrpContext = NULL;
}
}
break;
case FilePositionInformation:
//Status = FatSetPositionInfo(IrpContext, Irp, FileObject);
DPRINT1("FilePositionInformation\n");
break;
case FileLinkInformation:
Status = STATUS_INVALID_DEVICE_REQUEST;
break;
case FileAllocationInformation:
//Status = FatSetAllocationInfo(IrpContext, Irp, Fcb, FileObject);
DPRINT1("FileAllocationInformation\n");
break;
case FileEndOfFileInformation:
Status = FatSetEndOfFileInfo(IrpContext, Irp, FileObject, Vcb, Fcb);
break;
default:
Status = STATUS_INVALID_PARAMETER;
}
/* Release locks */
if (FcbAcquired) FatReleaseFcb(IrpContext, Fcb);
if (VcbAcquired) FatReleaseVcb(IrpContext, Vcb);
/* Complete request and return status */
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
}
NTSTATUS
NTAPI
FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
DPRINT1("FatSetInformation()\n");
return STATUS_NOT_IMPLEMENTED;
NTSTATUS Status;
BOOLEAN TopLevel, CanWait;
PFAT_IRP_CONTEXT IrpContext;
CanWait = TRUE;
TopLevel = FALSE;
Status = STATUS_INVALID_DEVICE_REQUEST;
/* Get CanWait flag */
if (IoGetCurrentIrpStackLocation(Irp)->FileObject != NULL)
CanWait = IoIsOperationSynchronous(Irp);
/* Enter FsRtl critical region */
FsRtlEnterFileSystem();
/* Set Top Level IRP if not set */
TopLevel = FatIsTopLevelIrp(Irp);
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, CanWait);
/* Perform the actual read */
Status = FatiSetInformation(IrpContext, Irp);
/* Restore top level Irp */
if (TopLevel) IoSetTopLevelIrp(NULL);
/* Leave FsRtl critical region */
FsRtlExitFileSystem();
return Status;
}
/* EOF */
+171 -3
View File
@@ -13,13 +13,181 @@
/* FUNCTIONS ****************************************************************/
NTSTATUS
NTAPI
FatOplockRequest(IN PFAT_IRP_CONTEXT IrpContext,
IN PIRP Irp)
{
NTSTATUS Status;
DPRINT1("Oplock request!\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
}
NTSTATUS
NTAPI
FatMarkVolumeDirty(IN PFAT_IRP_CONTEXT IrpContext,
IN PIRP Irp)
{
NTSTATUS Status;
DPRINT1("Marking volume as dirty\n");
Status = STATUS_SUCCESS;
FatCompleteRequest(IrpContext, Irp, Status);
return Status;
}
NTSTATUS
NTAPI
FatUserFsCtrl(PFAT_IRP_CONTEXT IrpContext, PIRP Irp)
{
DPRINT1("FatUserFsCtrl()\n");
FatCompleteRequest(IrpContext, Irp, STATUS_INVALID_DEVICE_REQUEST);
return STATUS_INVALID_DEVICE_REQUEST;
PIO_STACK_LOCATION IrpSp;
NTSTATUS Status;
ULONG Code;
/* Get current IRP stack location */
IrpSp = IoGetCurrentIrpStackLocation(Irp);
Code = IrpSp->Parameters.FileSystemControl.FsControlCode;
/* Set the wait flag */
if (Irp->RequestorMode != KernelMode &&
(Code & 3) == METHOD_NEITHER)
{
SetFlag(IrpContext->Flags, IRPCONTEXT_CANWAIT);
}
/* Branch according to the code */
switch (Code)
{
case FSCTL_REQUEST_OPLOCK_LEVEL_1:
case FSCTL_REQUEST_OPLOCK_LEVEL_2:
case FSCTL_REQUEST_BATCH_OPLOCK:
case FSCTL_OPLOCK_BREAK_ACKNOWLEDGE:
case FSCTL_OPBATCH_ACK_CLOSE_PENDING:
case FSCTL_OPLOCK_BREAK_NOTIFY:
case FSCTL_OPLOCK_BREAK_ACK_NO_2:
case FSCTL_REQUEST_FILTER_OPLOCK :
Status = FatOplockRequest(IrpContext, Irp);
break;
case FSCTL_LOCK_VOLUME:
//Status = FatLockVolume( IrpContext, Irp );
DPRINT1("FSCTL_LOCK_VOLUME\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_UNLOCK_VOLUME:
//Status = FatUnlockVolume( IrpContext, Irp );
DPRINT1("FSCTL_UNLOCK_VOLUME\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_DISMOUNT_VOLUME:
//Status = FatDismountVolume( IrpContext, Irp );
DPRINT1("FSCTL_DISMOUNT_VOLUME\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_MARK_VOLUME_DIRTY:
Status = FatMarkVolumeDirty(IrpContext, Irp);
break;
case FSCTL_IS_VOLUME_DIRTY:
//Status = FatIsVolumeDirty( IrpContext, Irp );
DPRINT1("FSCTL_IS_VOLUME_DIRTY\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_IS_VOLUME_MOUNTED:
//Status = FatIsVolumeMounted( IrpContext, Irp );
DPRINT1("FSCTL_IS_VOLUME_MOUNTED\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_IS_PATHNAME_VALID:
//Status = FatIsPathnameValid( IrpContext, Irp );
DPRINT1("FSCTL_IS_PATHNAME_VALID\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_QUERY_RETRIEVAL_POINTERS:
//Status = FatQueryRetrievalPointers( IrpContext, Irp );
DPRINT1("FSCTL_QUERY_RETRIEVAL_POINTERS\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_QUERY_FAT_BPB:
//Status = FatQueryBpb( IrpContext, Irp );
DPRINT1("FSCTL_QUERY_FAT_BPB\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_FILESYSTEM_GET_STATISTICS:
//Status = FatGetStatistics( IrpContext, Irp );
DPRINT1("FSCTL_FILESYSTEM_GET_STATISTICS\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_GET_VOLUME_BITMAP:
//Status = FatGetVolumeBitmap( IrpContext, Irp );
DPRINT1("FSCTL_GET_VOLUME_BITMAP\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_GET_RETRIEVAL_POINTERS:
//Status = FatGetRetrievalPointers( IrpContext, Irp );
DPRINT1("FSCTL_GET_RETRIEVAL_POINTERS\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_MOVE_FILE:
//Status = FatMoveFile( IrpContext, Irp );
DPRINT1("FSCTL_MOVE_FILE\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
case FSCTL_ALLOW_EXTENDED_DASD_IO:
//Status = FatAllowExtendedDasdIo( IrpContext, Irp );
DPRINT1("FSCTL_ALLOW_EXTENDED_DASD_IO\n");
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
break;
default:
DPRINT("FatUserFsCtrl(), unhandled fs control code 0x%x\n", Code);
Status = STATUS_INVALID_DEVICE_REQUEST;
FatCompleteRequest(IrpContext, Irp, Status);
}
//(((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method))
// 9c040
// 1 1 0 0 0
// 6 4 8 4 0
// 10011100000001000000
// DT = 1001 = 9
// Access = 11 = 3
// Function = 10000 = 16
// Method = 0
return Status;
}
NTSTATUS
+87 -1
View File
@@ -13,12 +13,98 @@
/* FUNCTIONS ****************************************************************/
NTSTATUS
NTAPI
FatiLockControl(PFAT_IRP_CONTEXT IrpContext, PIRP Irp)
{
PIO_STACK_LOCATION IrpSp;
TYPE_OF_OPEN TypeOfOpen;
PVCB Vcb;
PFCB Fcb;
PCCB Ccb;
NTSTATUS Status;
/* Get IRP stack location */
IrpSp = IoGetCurrentIrpStackLocation(Irp);
/* Determine type of open */
TypeOfOpen = FatDecodeFileObject(IrpSp->FileObject, &Vcb, &Fcb, &Ccb);
/* Only user file open is allowed */
if (TypeOfOpen != UserFileOpen)
{
FatCompleteRequest(IrpContext, Irp, STATUS_INVALID_PARAMETER);
return STATUS_INVALID_PARAMETER;
}
/* Acquire shared FCB lock */
if (!FatAcquireSharedFcb(IrpContext, Fcb))
{
UNIMPLEMENTED;
//Status = FatFsdPostRequest(IrpContext, Irp);
Status = STATUS_NOT_IMPLEMENTED;
return Status;
}
/* Check oplock state */
Status = FsRtlCheckOplock(&Fcb->Fcb.Oplock,
Irp,
IrpContext,
FatOplockComplete,
NULL);
if (Status != STATUS_SUCCESS)
{
/* Release FCB lock */
FatReleaseFcb(IrpContext, Fcb);
return Status;
}
/* Process the lock */
Status = FsRtlProcessFileLock(&Fcb->Fcb.Lock, Irp, NULL);
/* Update Fast I/O state */
Fcb->Header.IsFastIoPossible = FatIsFastIoPossible(Fcb);
/* Complete the request */
FatCompleteRequest(IrpContext, NULL, 0);
/* Release FCB lock */
FatReleaseFcb(IrpContext, Fcb);
return Status;
}
NTSTATUS
NTAPI
FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
PFAT_IRP_CONTEXT IrpContext;
NTSTATUS Status;
BOOLEAN TopLevel;
DPRINT1("FatLockControl()\n");
return STATUS_NOT_IMPLEMENTED;
/* Enter FsRtl critical region */
FsRtlEnterFileSystem();
/* Set Top Level IRP if not set */
TopLevel = FatIsTopLevelIrp(Irp);
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, IoIsOperationSynchronous(Irp));
/* Call internal function */
Status = FatiLockControl(IrpContext, Irp);
/* Reset Top Level IRP */
if (TopLevel) IoSetTopLevelIrp(NULL);
/* Leave FsRtl critical region */
FsRtlExitFileSystem();
return Status;
}
VOID
+1 -5
View File
@@ -91,11 +91,7 @@ FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp)
if (DeviceObject != FatGlobalData.DiskDeviceObject)
{
/* Set Top Level IRP if not set */
if (IoGetTopLevelIrp() == NULL)
{
IoSetTopLevelIrp(Irp);
TopLevel = TRUE;
}
TopLevel = FatIsTopLevelIrp(Irp);
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, CanWait);
+50 -10
View File
@@ -8,7 +8,7 @@
/* INCLUDES *****************************************************************/
//#define NDEBUG
#define NDEBUG
#include "fastfat.h"
/* FUNCTIONS ****************************************************************/
@@ -77,12 +77,31 @@ FatiQueryFsSizeInfo(PVCB Vcb,
Buffer->SectorsPerAllocationUnit = Vcb->Bpb.SectorsPerCluster;
Buffer->BytesPerSector = Vcb->Bpb.BytesPerSector;
DPRINT1("Total %d, free %d, SPC %d, BPS %d\n", Partition->FreeClusterCount,
Partition->NumClusters, Vcb->Bpb.SectorsPerCluster, Vcb->Bpb.BytesPerSector);
DPRINT1("Total %d, free %d, SPC %d, BPS %d\n", Partition->NumClusters,
Partition->FreeClusterCount, Vcb->Bpb.SectorsPerCluster, Vcb->Bpb.BytesPerSector);
return Status;
}
NTSTATUS
NTAPI
FatiQueryFsDeviceInfo(PVCB Vcb,
PFILE_FS_DEVICE_INFORMATION Buffer,
PLONG Length)
{
/* Deduct the minimum written length */
*Length -= sizeof(FILE_FS_DEVICE_INFORMATION);
/* Zero it */
RtlZeroMemory(Buffer, sizeof(FILE_FS_DEVICE_INFORMATION));
/* Set values */
Buffer->DeviceType = FILE_DEVICE_DISK;
Buffer->Characteristics = Vcb->TargetDeviceObject->Characteristics;
return STATUS_SUCCESS;
}
NTSTATUS
NTAPI
FatiQueryVolumeInfo(PFAT_IRP_CONTEXT IrpContext, PIRP Irp)
@@ -135,13 +154,28 @@ FatiQueryVolumeInfo(PFAT_IRP_CONTEXT IrpContext, PIRP Irp)
/* Call FsVolumeInfo handler */
Status = FatiQueryFsVolumeInfo(Vcb, Buffer, &Length);
break;
case FileFsSizeInformation:
/* Call FsVolumeInfo handler */
Status = FatiQueryFsSizeInfo(Vcb, Buffer, &Length);
break;
default:
DPRINT1("Volume information class %d is not supported!\n", InfoClass);
case FileFsDeviceInformation:
Status = FatiQueryFsDeviceInfo(Vcb, Buffer, &Length);
break;
case FileFsAttributeInformation:
UNIMPLEMENTED;
//Status = FatiQueryFsAttributeInfo(IrpContext, Vcb, Buffer, &Length);
break;
case FileFsFullSizeInformation:
UNIMPLEMENTED;
//Status = FatiQueryFsFullSizeInfo(IrpContext, Vcb, Buffer, &Length);
break;
default:
Status = STATUS_INVALID_PARAMETER;
}
/* Set IoStatus.Information to amount of filled bytes */
@@ -175,11 +209,7 @@ FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp)
FsRtlEnterFileSystem();
/* Set Top Level IRP if not set */
if (IoGetTopLevelIrp() == NULL)
{
IoSetTopLevelIrp(Irp);
TopLevel = TRUE;
}
TopLevel = FatIsTopLevelIrp(Irp);
/* Build an irp context */
IrpContext = FatBuildIrpContext(Irp, CanWait);
@@ -228,4 +258,14 @@ FatReadStreamFile(PVCB Vcb,
}
}
BOOLEAN
NTAPI
FatCheckForDismount(IN PFAT_IRP_CONTEXT IrpContext,
PVCB Vcb,
IN BOOLEAN Force)
{
/* We never allow deletion of a volume for now */
return FALSE;
}
/* EOF */
+1 -1
View File
@@ -27,7 +27,7 @@ typedef struct _NDIS_M_DRIVER_BLOCK {
PDRIVER_OBJECT DriverObject; /* Driver object of miniport */
LIST_ENTRY DeviceList; /* Adapters created by miniport */
PUNICODE_STRING RegistryPath; /* SCM Registry key */
#if !defined(_MSC_VER) && defined(__NDIS_H)
#if !defined(_MSC_VER) && defined(_NDIS_)
} NDIS_M_DRIVER_BLOCK_COMPATIBILITY_HACK_DONT_USE;
#else
} NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
+30 -30
View File
@@ -35,7 +35,7 @@ extern "C" {
typedef struct _ACPI_EVAL_INPUT_BUFFER {
ULONG Signature;
union {
_ANONYMOUS_UNION union {
UCHAR MethodName[4];
ULONG MethodNameAsUlong;
} DUMMYUNIONNAME;
@@ -43,7 +43,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER {
typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER {
ULONG Signature;
union {
_ANONYMOUS_UNION union {
UCHAR MethodName[4];
ULONG MethodNameAsUlong;
} DUMMYUNIONNAME;
@@ -52,7 +52,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER {
typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING {
ULONG Signature;
union {
_ANONYMOUS_UNION union {
UCHAR MethodName[4];
ULONG MethodNameAsUlong;
} DUMMYUNIONNAME;
@@ -63,7 +63,7 @@ typedef struct _ACPI_EVAL_INPUT_BUFFER_SIMPLE_STRING {
typedef struct _ACPI_METHOD_ARGUMENT {
USHORT Type;
USHORT DataLength;
union {
_ANONYMOUS_UNION union {
ULONG Argument;
UCHAR Data[ANYSIZE_ARRAY];
} DUMMYUNIONNAME;
@@ -72,7 +72,7 @@ typedef ACPI_METHOD_ARGUMENT UNALIGNED *PACPI_METHOD_ARGUMENT;
typedef struct _ACPI_EVAL_INPUT_BUFFER_COMPLEX {
ULONG Signature;
union {
_ANONYMOUS_UNION union {
UCHAR MethodName[4];
ULONG MethodNameAsUlong;
} DUMMYUNIONNAME;
@@ -142,47 +142,47 @@ typedef struct _ACPI_ENUM_CHILDREN_OUTPUT_BUFFER {
typedef ACPI_ENUM_CHILDREN_OUTPUT_BUFFER UNALIGNED *PACPI_ENUM_CHILDREN_OUTPUT_BUFFER;
#define ACPI_METHOD_ARGUMENT_LENGTH( DataLength ) \
(FIELD_OFFSET(ACPI_METHOD_ARGUMENT, Data) + max(sizeof(ULONG), DataLength))
(FIELD_OFFSET(ACPI_METHOD_ARGUMENT, Data) + max(sizeof(ULONG), DataLength))
#define ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) \
(ACPI_METHOD_ARGUMENT_LENGTH(((PACPI_METHOD_ARGUMENT)Argument)->DataLength))
(ACPI_METHOD_ARGUMENT_LENGTH(((PACPI_METHOD_ARGUMENT)Argument)->DataLength))
#define ACPI_METHOD_NEXT_ARGUMENT( Argument ) \
(PACPI_METHOD_ARGUMENT) ( (PUCHAR) Argument + \
ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) )
(PACPI_METHOD_ARGUMENT) ( (PUCHAR) Argument + \
ACPI_METHOD_ARGUMENT_LENGTH_FROM_ARGUMENT( Argument ) )
#define ACPI_METHOD_SET_ARGUMENT_INTEGER( MethodArgument, IntData ) \
{ MethodArgument->Type = ACPI_METHOD_ARGUMENT_INTEGER; \
MethodArgument->DataLength = sizeof(ULONG); \
MethodArgument->Argument = IntData; }
{ MethodArgument->Type = ACPI_METHOD_ARGUMENT_INTEGER; \
MethodArgument->DataLength = sizeof(ULONG); \
MethodArgument->Argument = IntData; }
#define ACPI_METHOD_SET_ARGUMENT_STRING( Argument, StrData ) \
{ Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \
Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \
RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
{ Argument->Type = ACPI_METHOD_ARGUMENT_STRING; \
Argument->DataLength = strlen((PCHAR)StrData) + sizeof(UCHAR); \
RtlCopyMemory(&Argument->Data[0],(PUCHAR)StrData,Argument->DataLength); }
#define ACPI_METHOD_SET_ARGUMENT_BUFFER( Argument, BuffData, BuffLength ) \
{ Argument->Type = ACPI_METHOD_ARGUMENT_BUFFER; \
Argument->DataLength = BuffLength; \
RtlCopyMemory(&Argument->Data[0],(PUCHAR)BuffData,Argument->DataLength); }
{ Argument->Type = ACPI_METHOD_ARGUMENT_BUFFER; \
Argument->DataLength = BuffLength; \
RtlCopyMemory(&Argument->Data[0],(PUCHAR)BuffData,Argument->DataLength); }
#define ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) \
( (2* sizeof (ULONG)) + Child->NameLength )
#define ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) \
( (2* sizeof (ULONG)) + Child->NameLength )
#define ACPI_ENUM_CHILD_NEXT( Child ) \
(PACPI_ENUM_CHILD) ( (PUCHAR) Child + \
ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) )
#define ACPI_ENUM_CHILD_NEXT( Child ) \
(PACPI_ENUM_CHILD) ( (PUCHAR) Child + \
ACPI_ENUM_CHILD_LENGTH_FROM_CHILD( Child ) )
#define IOCTL_ACPI_ASYNC_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ACQUIRE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_RELEASE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ASYNC_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_EVAL_METHOD CTL_CODE(FILE_DEVICE_ACPI, 1, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ACQUIRE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 4, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_RELEASE_GLOBAL_LOCK CTL_CODE(FILE_DEVICE_ACPI, 5, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define IOCTL_ACPI_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ASYNC_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ENUM_CHILDREN CTL_CODE(FILE_DEVICE_ACPI, 8, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ASYNC_EVAL_METHOD_EX CTL_CODE(FILE_DEVICE_ACPI, 7, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_ACPI_ENUM_CHILDREN CTL_CODE(FILE_DEVICE_ACPI, 8, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#endif
#ifdef __cplusplus
-9
View File
@@ -6,15 +6,6 @@
extern "C" {
#endif
/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
#else
#define __GNU_EXTENSION
#endif
#endif
#define STDMETHODCALLTYPE __stdcall
#ifndef _WDMDDK_
+343 -366
View File
@@ -22,15 +22,6 @@
#ifndef _D3DHAL_H_
#define _D3DHAL_H_
/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
#else
#define __GNU_EXTENSION
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
@@ -61,31 +52,31 @@ typedef struct _DDRAWI_DDRAWSURFACE_LCL FAR *LPDDRAWI_DDRAWSURFACE_LCL;
* device info structures
*/
typedef struct _D3DDeviceDesc_V1 {
DWORD dwSize;
DWORD dwFlags;
D3DCOLORMODEL dcmColorModel;
DWORD dwDevCaps;
D3DTRANSFORMCAPS dtcTransformCaps;
BOOL bClipping;
D3DLIGHTINGCAPS dlcLightingCaps;
D3DPRIMCAPS dpcLineCaps;
D3DPRIMCAPS dpcTriCaps;
DWORD dwDeviceRenderBitDepth;
DWORD dwDeviceZBufferBitDepth;
DWORD dwMaxBufferSize;
DWORD dwMaxVertexCount;
} D3DDEVICEDESC_V1,*LPD3DDEVICEDESC_V1;
DWORD dwSize;
DWORD dwFlags;
D3DCOLORMODEL dcmColorModel;
DWORD dwDevCaps;
D3DTRANSFORMCAPS dtcTransformCaps;
BOOL bClipping;
D3DLIGHTINGCAPS dlcLightingCaps;
D3DPRIMCAPS dpcLineCaps;
D3DPRIMCAPS dpcTriCaps;
DWORD dwDeviceRenderBitDepth;
DWORD dwDeviceZBufferBitDepth;
DWORD dwMaxBufferSize;
DWORD dwMaxVertexCount;
} D3DDEVICEDESC_V1, *LPD3DDEVICEDESC_V1;
/* this is to allow keeping the bulk of our OpenGL code out of x11drv */
#define D3DDD_WINE_OPENGL_DEVICE 0x00008000
typedef struct _D3DHAL_GLOBALDRIVERDATA {
DWORD dwSize;
D3DDEVICEDESC_V1 hwCaps;
DWORD dwNumVertices;
DWORD dwNumClipVertices;
DWORD dwNumTextureFormats;
LPDDSURFACEDESC lpTextureFormats;
DWORD dwSize;
D3DDEVICEDESC_V1 hwCaps;
DWORD dwNumVertices;
DWORD dwNumClipVertices;
DWORD dwNumTextureFormats;
LPDDSURFACEDESC lpTextureFormats;
} D3DHAL_GLOBALDRIVERDATA;
#ifndef D3DHAL_GLOBALDRIVERDATA_DEFINED
@@ -94,103 +85,103 @@ typedef D3DHAL_GLOBALDRIVERDATA *LPD3DHAL_GLOBALDRIVERDATA;
#endif
typedef struct _D3DHAL_D3DEXTENDEDCAPS {
DWORD dwSize;
DWORD dwSize;
/* DirectX 5 */
DWORD dwMinTextureWidth, dwMaxTextureWidth;
DWORD dwMinTextureHeight, dwMaxTextureHeight;
DWORD dwMinStippleWidth, dwMaxStippleWidth;
DWORD dwMinStippleHeight, dwMaxStippleHeight;
DWORD dwMinTextureWidth, dwMaxTextureWidth;
DWORD dwMinTextureHeight, dwMaxTextureHeight;
DWORD dwMinStippleWidth, dwMaxStippleWidth;
DWORD dwMinStippleHeight, dwMaxStippleHeight;
/* DirectX 6 */
DWORD dwMaxTextureRepeat;
DWORD dwMaxTextureAspectRatio;
DWORD dwMaxAnisotropy;
D3DVALUE dvGuardBandLeft;
D3DVALUE dvGuardBandTop;
D3DVALUE dvGuardBandRight;
D3DVALUE dvGuardBandBottom;
D3DVALUE dvExtentsAdjust;
DWORD dwStencilCaps;
DWORD dwFVFCaps;
DWORD dwTextureOpCaps;
WORD wMaxTextureBlendStages;
WORD wMaxSimultaneousTextures;
DWORD dwMaxTextureRepeat;
DWORD dwMaxTextureAspectRatio;
DWORD dwMaxAnisotropy;
D3DVALUE dvGuardBandLeft;
D3DVALUE dvGuardBandTop;
D3DVALUE dvGuardBandRight;
D3DVALUE dvGuardBandBottom;
D3DVALUE dvExtentsAdjust;
DWORD dwStencilCaps;
DWORD dwFVFCaps;
DWORD dwTextureOpCaps;
WORD wMaxTextureBlendStages;
WORD wMaxSimultaneousTextures;
/* DirectX 7 */
DWORD dwMaxActiveLights;
D3DVALUE dvMaxVertexW;
WORD wMaxUserClipPlanes;
WORD wMaxVertexBlendMatrices;
DWORD dwVertexProcessingCaps;
DWORD dwReserved1;
DWORD dwReserved2;
DWORD dwReserved3;
DWORD dwReserved4;
} D3DHAL_D3DEXTENDEDCAPS,*LPD3DHAL_D3DEXTENDEDCAPS;
DWORD dwMaxActiveLights;
D3DVALUE dvMaxVertexW;
WORD wMaxUserClipPlanes;
WORD wMaxVertexBlendMatrices;
DWORD dwVertexProcessingCaps;
DWORD dwReserved1;
DWORD dwReserved2;
DWORD dwReserved3;
DWORD dwReserved4;
} D3DHAL_D3DEXTENDEDCAPS, *LPD3DHAL_D3DEXTENDEDCAPS;
/*****************************************************************************
* d3d->driver callbacks
*/
typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA;
typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA;
typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA;
typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA;
typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA;
typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA;
typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA;
typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA;
typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA;
typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA;
typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA;
typedef struct _D3DHAL_CONTEXTCREATEDATA *LPD3DHAL_CONTEXTCREATEDATA;
typedef struct _D3DHAL_CONTEXTDESTROYDATA *LPD3DHAL_CONTEXTDESTROYDATA;
typedef struct _D3DHAL_CONTEXTDESTROYALLDATA *LPD3DHAL_CONTEXTDESTROYALLDATA;
typedef struct _D3DHAL_SCENECAPTUREDATA *LPD3DHAL_SCENECAPTUREDATA;
typedef struct _D3DHAL_RENDERSTATEDATA *LPD3DHAL_RENDERSTATEDATA;
typedef struct _D3DHAL_RENDERPRIMITIVEDATA *LPD3DHAL_RENDERPRIMITIVEDATA;
typedef struct _D3DHAL_TEXTURECREATEDATA *LPD3DHAL_TEXTURECREATEDATA;
typedef struct _D3DHAL_TEXTUREDESTROYDATA *LPD3DHAL_TEXTUREDESTROYDATA;
typedef struct _D3DHAL_TEXTURESWAPDATA *LPD3DHAL_TEXTURESWAPDATA;
typedef struct _D3DHAL_TEXTUREGETSURFDATA *LPD3DHAL_TEXTUREGETSURFDATA;
typedef struct _D3DHAL_GETSTATEDATA *LPD3DHAL_GETSTATEDATA;
typedef DWORD (PASCAL *LPD3DHAL_CONTEXTCREATECB) (LPD3DHAL_CONTEXTCREATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYCB) (LPD3DHAL_CONTEXTDESTROYDATA);
typedef DWORD (PASCAL *LPD3DHAL_CONTEXTDESTROYALLCB)(LPD3DHAL_CONTEXTDESTROYALLDATA);
typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA);
typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_SCENECAPTURECB) (LPD3DHAL_SCENECAPTUREDATA);
typedef DWORD (PASCAL *LPD3DHAL_RENDERSTATECB) (LPD3DHAL_RENDERSTATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_RENDERPRIMITIVECB) (LPD3DHAL_RENDERPRIMITIVEDATA);
typedef DWORD (PASCAL *LPD3DHAL_TEXTURECREATECB) (LPD3DHAL_TEXTURECREATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_TEXTUREDESTROYCB) (LPD3DHAL_TEXTUREDESTROYDATA);
typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA);
typedef DWORD (PASCAL *LPD3DHAL_TEXTURESWAPCB) (LPD3DHAL_TEXTURESWAPDATA);
typedef DWORD (PASCAL *LPD3DHAL_TEXTUREGETSURFCB) (LPD3DHAL_TEXTUREGETSURFDATA);
typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_GETSTATECB) (LPD3DHAL_GETSTATEDATA);
typedef struct _D3DHAL_CALLBACKS {
DWORD dwSize;
LPD3DHAL_CONTEXTCREATECB ContextCreate;
LPD3DHAL_CONTEXTDESTROYCB ContextDestroy;
LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
LPD3DHAL_SCENECAPTURECB SceneCapture;
LPVOID lpReserved10;
LPVOID lpReserved11;
LPD3DHAL_RENDERSTATECB RenderState;
LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive;
DWORD dwReserved;
LPD3DHAL_TEXTURECREATECB TextureCreate;
LPD3DHAL_TEXTUREDESTROYCB TextureDestroy;
LPD3DHAL_TEXTURESWAPCB TextureSwap;
LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf;
DWORD dwSize;
LPD3DHAL_CONTEXTCREATECB ContextCreate;
LPD3DHAL_CONTEXTDESTROYCB ContextDestroy;
LPD3DHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
LPD3DHAL_SCENECAPTURECB SceneCapture;
LPVOID lpReserved10;
LPVOID lpReserved11;
LPD3DHAL_RENDERSTATECB RenderState;
LPD3DHAL_RENDERPRIMITIVECB RenderPrimitive;
DWORD dwReserved;
LPD3DHAL_TEXTURECREATECB TextureCreate;
LPD3DHAL_TEXTUREDESTROYCB TextureDestroy;
LPD3DHAL_TEXTURESWAPCB TextureSwap;
LPD3DHAL_TEXTUREGETSURFCB TextureGetSurf;
/* now why did MS create CALLBACKS2 and CALLBACKS3 structures if
* all these reserved fields were available? we may never know */
LPVOID lpReserved12;
LPVOID lpReserved13;
LPVOID lpReserved14;
LPVOID lpReserved15;
LPVOID lpReserved16;
LPVOID lpReserved17;
LPVOID lpReserved18;
LPVOID lpReserved19;
LPVOID lpReserved20;
LPVOID lpReserved21;
LPD3DHAL_GETSTATECB GetState;
DWORD dwReserved0;
DWORD dwReserved1;
DWORD dwReserved2;
DWORD dwReserved3;
DWORD dwReserved4;
DWORD dwReserved5;
DWORD dwReserved6;
DWORD dwReserved7;
DWORD dwReserved8;
DWORD dwReserved9;
LPVOID lpReserved12;
LPVOID lpReserved13;
LPVOID lpReserved14;
LPVOID lpReserved15;
LPVOID lpReserved16;
LPVOID lpReserved17;
LPVOID lpReserved18;
LPVOID lpReserved19;
LPVOID lpReserved20;
LPVOID lpReserved21;
LPD3DHAL_GETSTATECB GetState;
DWORD dwReserved0;
DWORD dwReserved1;
DWORD dwReserved2;
DWORD dwReserved3;
DWORD dwReserved4;
DWORD dwReserved5;
DWORD dwReserved6;
DWORD dwReserved7;
DWORD dwReserved8;
DWORD dwReserved9;
} D3DHAL_CALLBACKS;
#ifndef D3DHAL_CALLBACKS_DEFINED
@@ -198,132 +189,132 @@ typedef D3DHAL_CALLBACKS *LPD3DHAL_CALLBACKS;
#define D3DHAL_CALLBACKS_DEFINED
#endif
typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA;
typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA;
typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA;
typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;
typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA;
typedef struct _D3DHAL_SETRENDERTARGETDATA *LPD3DHAL_SETRENDERTARGETDATA;
typedef struct _D3DHAL_CLEARDATA *LPD3DHAL_CLEARDATA;
typedef struct _D3DHAL_DRAWONEPRIMITIVEDATA *LPD3DHAL_DRAWONEPRIMITIVEDATA;
typedef struct _D3DHAL_DRAWONEINDEXEDPRIMITIVEDATA *LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA;
typedef struct _D3DHAL_DRAWPRIMITIVESDATA *LPD3DHAL_DRAWPRIMITIVESDATA;
typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA);
typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA);
typedef DWORD (PASCAL *LPD3DHAL_SETRENDERTARGETCB) (LPD3DHAL_SETRENDERTARGETDATA);
typedef DWORD (PASCAL *LPD3DHAL_CLEARCB) (LPD3DHAL_CLEARDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWONEPRIMITIVECB) (LPD3DHAL_DRAWONEPRIMITIVEDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB)(LPD3DHAL_DRAWONEINDEXEDPRIMITIVEDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVESCB) (LPD3DHAL_DRAWPRIMITIVESDATA);
typedef struct _D3DHAL_CALLBACKS2 {
DWORD dwSize;
DWORD dwFlags;
LPD3DHAL_SETRENDERTARGETCB SetRenderTarget;
LPD3DHAL_CLEARCB Clear;
LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive;
LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive;
LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives;
} D3DHAL_CALLBACKS2,*LPD3DHAL_CALLBACKS2;
DWORD dwSize;
DWORD dwFlags;
LPD3DHAL_SETRENDERTARGETCB SetRenderTarget;
LPD3DHAL_CLEARCB Clear;
LPD3DHAL_DRAWONEPRIMITIVECB DrawOnePrimitive;
LPD3DHAL_DRAWONEINDEXEDPRIMITIVECB DrawOneIndexedPrimitive;
LPD3DHAL_DRAWPRIMITIVESCB DrawPrimitives;
} D3DHAL_CALLBACKS2, *LPD3DHAL_CALLBACKS2;
typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA;
typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;
typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA;
typedef struct _D3DHAL_CLEAR2DATA *LPD3DHAL_CLEAR2DATA;
typedef struct _D3DHAL_VALIDATETEXTURESTAGESTATEDATA *LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA;
typedef struct _D3DHAL_DRAWPRIMITIVES2DATA *LPD3DHAL_DRAWPRIMITIVES2DATA;
typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA);
typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA);
typedef DWORD (PASCAL *LPD3DHAL_CLEAR2CB) (LPD3DHAL_CLEAR2DATA);
typedef DWORD (PASCAL *LPD3DHAL_VALIDATETEXTURESTAGESTATECB) (LPD3DHAL_VALIDATETEXTURESTAGESTATEDATA);
typedef DWORD (PASCAL *LPD3DHAL_DRAWPRIMITIVES2CB) (LPD3DHAL_DRAWPRIMITIVES2DATA);
typedef struct _D3DHAL_CALLBACKS3 {
DWORD dwSize;
DWORD dwFlags;
LPD3DHAL_CLEAR2CB Clear2;
LPVOID lpvReserved;
LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
} D3DHAL_CALLBACKS3,*LPD3DHAL_CALLBACKS3;
DWORD dwSize;
DWORD dwFlags;
LPD3DHAL_CLEAR2CB Clear2;
LPVOID lpvReserved;
LPD3DHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
LPD3DHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
} D3DHAL_CALLBACKS3, *LPD3DHAL_CALLBACKS3;
/*****************************************************************************
* parameter structures
*/
typedef struct _D3DHAL_CONTEXTCREATEDATA {
union {
LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */
LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */
_ANONYMOUS_UNION union {
LPDDRAWI_DIRECTDRAW_GBL lpDDGbl; /* pre-DirectX 7 */
LPDDRAWI_DIRECTDRAW_LCL lpDDLcl; /* DirectX 7 */
} DUMMYUNIONNAME1;
union {
LPDIRECTDRAWSURFACE lpDDS;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */
_ANONYMOUS_UNION union {
LPDIRECTDRAWSURFACE lpDDS;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl; /* DirectX 7 */
} DUMMYUNIONNAME2;
union {
LPDIRECTDRAWSURFACE lpDDSZ;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */
_ANONYMOUS_UNION union {
LPDIRECTDRAWSURFACE lpDDSZ;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl; /* DirectX 7 */
} DUMMYUNIONNAME3;
union {
DWORD dwPID;
ULONG_PTR dwrstates;
_ANONYMOUS_UNION union {
DWORD dwPID;
ULONG_PTR dwrstates;
} DUMMYUNIONNAME4;
ULONG_PTR dwhContext;
HRESULT ddrval;
ULONG_PTR dwhContext;
HRESULT ddrval;
} D3DHAL_CONTEXTCREATEDATA;
typedef struct _D3DHAL_CONTEXTDESTROYDATA {
ULONG_PTR dwhContext;
HRESULT ddrval;
ULONG_PTR dwhContext;
HRESULT ddrval;
} D3DHAL_CONTEXTDESTROYDATA;
typedef struct _D3DHAL_CONTEXTDESTROYALLDATA {
DWORD dwPID;
HRESULT ddrval;
DWORD dwPID;
HRESULT ddrval;
} D3DHAL_CONTEXTDESTROYALLDATA;
typedef struct _D3DHAL_SCENECAPTUREDATA {
ULONG_PTR dwhContext;
DWORD dwFlag;
HRESULT ddrval;
ULONG_PTR dwhContext;
DWORD dwFlag;
HRESULT ddrval;
} D3DHAL_SCENECAPTUREDATA;
#define D3DHAL_SCENE_CAPTURE_START 0x00000000
#define D3DHAL_SCENE_CAPTURE_END 0x00000001
#define D3DHAL_SCENE_CAPTURE_START 0x00000000
#define D3DHAL_SCENE_CAPTURE_END 0x00000001
typedef struct _D3DHAL_SETRENDERTARGETDATA {
ULONG_PTR dwhContext;
union {
LPDIRECTDRAWSURFACE lpDDS;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl;
ULONG_PTR dwhContext;
_ANONYMOUS_UNION union {
LPDIRECTDRAWSURFACE lpDDS;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSLcl;
} DUMMYUNIONNAME1;
union {
LPDIRECTDRAWSURFACE lpDDSZ;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl;
_ANONYMOUS_UNION union {
LPDIRECTDRAWSURFACE lpDDSZ;
LPDDRAWI_DDRAWSURFACE_LCL lpDDSZLcl;
} DUMMYUNIONNAME2;
HRESULT ddrval;
HRESULT ddrval;
} D3DHAL_SETRENDERTARGETDATA;
typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
ULONG_PTR dwhContext;
DWORD dwFlags;
DWORD dwVertexType;
LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
DWORD dwCommandOffset;
DWORD dwCommandLength;
union {
LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
LPVOID lpVertices;
ULONG_PTR dwhContext;
DWORD dwFlags;
DWORD dwVertexType;
LPDDRAWI_DDRAWSURFACE_LCL lpDDCommands;
DWORD dwCommandOffset;
DWORD dwCommandLength;
_ANONYMOUS_UNION union {
LPDDRAWI_DDRAWSURFACE_LCL lpDDVertex;
LPVOID lpVertices;
} DUMMYUNIONNAME1;
DWORD dwVertexOffset;
DWORD dwVertexLength;
DWORD dwReqVertexBufSize;
DWORD dwReqCommandBufSize;
LPDWORD lpdwRStates;
union {
DWORD dwVertexSize;
HRESULT ddrval;
DWORD dwVertexOffset;
DWORD dwVertexLength;
DWORD dwReqVertexBufSize;
DWORD dwReqCommandBufSize;
LPDWORD lpdwRStates;
_ANONYMOUS_UNION union {
DWORD dwVertexSize;
HRESULT ddrval;
} DUMMYUNIONNAME2;
DWORD dwErrorOffset;
DWORD dwErrorOffset;
} D3DHAL_DRAWPRIMITIVES2DATA;
#define D3DHALDP2_USERMEMVERTICES 0x00000001
#define D3DHALDP2_EXECUTEBUFFER 0x00000002
#define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004
#define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008
#define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010
#define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020
#define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040
#define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080
#define D3DHALDP2_USERMEMVERTICES 0x00000001
#define D3DHALDP2_EXECUTEBUFFER 0x00000002
#define D3DHALDP2_SWAPVERTEXBUFFER 0x00000004
#define D3DHALDP2_SWAPCOMMANDBUFFER 0x00000008
#define D3DHALDP2_REQVERTEXBUFSIZE 0x00000010
#define D3DHALDP2_REQCOMMANDBUFSIZE 0x00000020
#define D3DHALDP2_VIDMEMVERTEXBUF 0x00000040
#define D3DHALDP2_VIDMEMCOMMANDBUF 0x00000080
/*****************************************************************************
* DrawPrimitives2 command structures
@@ -331,50 +322,50 @@ typedef struct _D3DHAL_DRAWPRIMITIVES2DATA {
typedef struct _D3DHAL_DP2COMMAND {
BYTE bCommand;
BYTE bReserved;
union {
_ANONYMOUS_UNION union {
WORD wPrimitiveCount;
WORD wStateCount;
} DUMMYUNIONNAME;
} D3DHAL_DP2COMMAND,*LPD3DHAL_DP2COMMAND;
} D3DHAL_DP2COMMAND, *LPD3DHAL_DP2COMMAND;
typedef enum _D3DHAL_DP2OPERATION {
D3DDP2OP_POINTS = 1,
D3DDP2OP_INDEXEDLINELIST = 2,
D3DDP2OP_INDEXEDTRIANGLELIST = 3,
D3DDP2OP_RENDERSTATE = 8,
D3DDP2OP_LINELIST = 15,
D3DDP2OP_LINESTRIP = 16,
D3DDP2OP_INDEXEDLINESTRIP = 17,
D3DDP2OP_TRIANGLELIST = 18,
D3DDP2OP_TRIANGLESTRIP = 19,
D3DDP2OP_INDEXEDTRIANGLESTRIP = 20,
D3DDP2OP_TRIANGLEFAN = 21,
D3DDP2OP_INDEXEDTRIANGLEFAN = 22,
D3DDP2OP_TRIANGLEFAN_IMM = 23,
D3DDP2OP_LINELIST_IMM = 24,
D3DDP2OP_TEXTURESTAGESTATE = 25,
D3DDP2OP_INDEXEDTRIANGLELIST2 = 26,
D3DDP2OP_INDEXEDLINELIST2 = 27,
D3DDP2OP_VIEWPORTINFO = 28,
D3DDP2OP_WINFO = 29,
D3DDP2OP_POINTS = 1,
D3DDP2OP_INDEXEDLINELIST = 2,
D3DDP2OP_INDEXEDTRIANGLELIST = 3,
D3DDP2OP_RENDERSTATE = 8,
D3DDP2OP_LINELIST = 15,
D3DDP2OP_LINESTRIP = 16,
D3DDP2OP_INDEXEDLINESTRIP = 17,
D3DDP2OP_TRIANGLELIST = 18,
D3DDP2OP_TRIANGLESTRIP = 19,
D3DDP2OP_INDEXEDTRIANGLESTRIP = 20,
D3DDP2OP_TRIANGLEFAN = 21,
D3DDP2OP_INDEXEDTRIANGLEFAN = 22,
D3DDP2OP_TRIANGLEFAN_IMM = 23,
D3DDP2OP_LINELIST_IMM = 24,
D3DDP2OP_TEXTURESTAGESTATE = 25,
D3DDP2OP_INDEXEDTRIANGLELIST2 = 26,
D3DDP2OP_INDEXEDLINELIST2 = 27,
D3DDP2OP_VIEWPORTINFO = 28,
D3DDP2OP_WINFO = 29,
/* pre-DirectX 7 interfaces */
D3DDP2OP_SETPALETTE = 30,
D3DDP2OP_UPDATEPALETTE = 31,
D3DDP2OP_SETPALETTE = 30,
D3DDP2OP_UPDATEPALETTE = 31,
/* DirectX 7 interfaces */
D3DDP2OP_ZRANGE = 32,
D3DDP2OP_SETMATERIAL = 33,
D3DDP2OP_SETLIGHT = 34,
D3DDP2OP_CREATELIGHT = 35,
D3DDP2OP_SETTRANSFORM = 36,
D3DDP2OP_TEXBLT = 38,
D3DDP2OP_STATESET = 39,
D3DDP2OP_SETPRIORITY = 40,
D3DDP2OP_ZRANGE = 32,
D3DDP2OP_SETMATERIAL = 33,
D3DDP2OP_SETLIGHT = 34,
D3DDP2OP_CREATELIGHT = 35,
D3DDP2OP_SETTRANSFORM = 36,
D3DDP2OP_TEXBLT = 38,
D3DDP2OP_STATESET = 39,
D3DDP2OP_SETPRIORITY = 40,
/* all interfaces */
D3DDP2OP_SETRENDERTARGET = 41,
D3DDP2OP_CLEAR = 42,
D3DDP2OP_SETRENDERTARGET = 41,
D3DDP2OP_CLEAR = 42,
/* DirectX 7 interfaces */
D3DDP2OP_SETTEXLOD = 43,
D3DPP2OP_SETCLIPPLANE = 44,
D3DDP2OP_SETTEXLOD = 43,
D3DPP2OP_SETCLIPPLANE = 44,
#if(DIRECT3D_VERSION >= 0x0800)
D3DDP2OP_CREATEVERTEXSHADER = 45,
D3DDP2OP_DELETEVERTEXSHADER = 46,
@@ -433,84 +424,84 @@ typedef enum _D3DHAL_DP2OPERATION {
typedef struct _D3DHAL_POINTS {
WORD wCount;
WORD wVStart;
} D3DHAL_DP2POINTS,*LPD3DHAL_DP2POINTS;
} D3DHAL_DP2POINTS, *LPD3DHAL_DP2POINTS;
/* line primitives */
typedef struct _D3DHAL_DP2STARTVERTEX {
WORD wVStart;
} D3DHAL_DP2STARTVERTEX,*LPD3DHAL_DP2STARTVERTEX;
} D3DHAL_DP2STARTVERTEX, *LPD3DHAL_DP2STARTVERTEX;
typedef struct _D3DHAL_DP2LINELIST {
WORD wVStart;
} D3DHAL_DP2LINELIST,*LPD3DHAL_DP2LINELIST;
} D3DHAL_DP2LINELIST, *LPD3DHAL_DP2LINELIST;
typedef struct _D3DHAL_DP2INDEXEDLINELIST {
WORD wV1;
WORD wV2;
} D3DHAL_DP2INDEXEDLINELIST,*LPD3DHAL_DP2INDEXEDLINELIST;
} D3DHAL_DP2INDEXEDLINELIST, *LPD3DHAL_DP2INDEXEDLINELIST;
typedef struct _D3DHAL_DP2LINESTRIP {
WORD wVStart;
} D3DHAL_DP2LINESTRIP,*LPD3DHAL_DP2LINESTRIP;
} D3DHAL_DP2LINESTRIP, *LPD3DHAL_DP2LINESTRIP;
typedef struct _D3DHAL_DP2INDEXEDLINESTRIP {
WORD wV[2];
} D3DHAL_DP2INDEXEDLINESTRIP,*LPD3DHAL_DP2INDEXEDLINESTRIP;
} D3DHAL_DP2INDEXEDLINESTRIP, *LPD3DHAL_DP2INDEXEDLINESTRIP;
/* triangle primitives */
typedef struct _D3DHAL_DP2TRIANGLELIST {
WORD wVStart;
} D3DHAL_DP2TRIANGLELIST,*LPD3DHAL_DP2TRIANGLELIST;
} D3DHAL_DP2TRIANGLELIST, *LPD3DHAL_DP2TRIANGLELIST;
typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST {
WORD wV1;
WORD wV2;
WORD wV3;
WORD wFlags;
} D3DHAL_DP2INDEXEDTRIANGLELIST,*LPD3DHAL_DP2INDEXEDTRIANGLELIST;
} D3DHAL_DP2INDEXEDTRIANGLELIST, *LPD3DHAL_DP2INDEXEDTRIANGLELIST;
typedef struct _D3DHAL_DP2INDEXEDTRIANGLELIST2 {
WORD wV1;
WORD wV2;
WORD wV3;
} D3DHAL_DP2INDEXEDTRIANGLELIST2,*LPD3DHAL_DP2INDEXEDTRIANGLELIST2;
} D3DHAL_DP2INDEXEDTRIANGLELIST2, *LPD3DHAL_DP2INDEXEDTRIANGLELIST2;
typedef struct _D3DHAL_DP2TRIANGLESTRIP {
WORD wVStart;
} D3DHAL_DP2TRIANGLESTRIP,*LPD3DHAL_DP2TRIANGLESTRIP;
} D3DHAL_DP2TRIANGLESTRIP, *LPD3DHAL_DP2TRIANGLESTRIP;
typedef struct _D3DHAL_DP2INDEXEDTRIANGLESTRIP {
WORD wV[3];
} D3DHAL_DP2INDEXEDTRIANGLESTRIP,*LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;
} D3DHAL_DP2INDEXEDTRIANGLESTRIP, *LPD3DHAL_DP2INDEXEDTRIANGLESTRIP;
typedef struct _D3DHAL_DP2TRIANGLEFAN {
WORD wVStart;
} D3DHAL_DP2TRIANGLEFAN,*LPD3DHAL_DP2TRIANGLEFAN;
} D3DHAL_DP2TRIANGLEFAN, *LPD3DHAL_DP2TRIANGLEFAN;
typedef struct _D3DHAL_DP2INDEXEDTRIANGLEFAN {
WORD wV[3];
} D3DHAL_DP2INDEXEDTRIANGLEFAN,*LPD3DHAL_DP2INDEXEDTRIANGLEFAN;
} D3DHAL_DP2INDEXEDTRIANGLEFAN, *LPD3DHAL_DP2INDEXEDTRIANGLEFAN;
typedef struct _D3DHAL_DP2TRIANGLEFAN_IMM {
DWORD dwEdgeFlags;
} D3DHAL_DP2TRIANGLEFAN_IMM,*LPD3DHAL_DP2TRIANGLEFAN_IMM;
} D3DHAL_DP2TRIANGLEFAN_IMM, *LPD3DHAL_DP2TRIANGLEFAN_IMM;
/* render states */
typedef struct _D3DHAL_DP2RENDERSTATE {
D3DRENDERSTATETYPE RenderState;
union {
D3DRENDERSTATETYPE RenderState;
_ANONYMOUS_UNION union {
D3DVALUE dvState;
DWORD dwState;
} DUMMYUNIONNAME;
} D3DHAL_DP2RENDERSTATE,*LPD3DHAL_DP2RENDERSTATE;
} D3DHAL_DP2RENDERSTATE, *LPD3DHAL_DP2RENDERSTATE;
typedef struct _D3DHAL_DP2TEXTURESTAGESTATE {
WORD wStage;
WORD TSState;
WORD wStage;
WORD TSState;
DWORD dwValue;
} D3DHAL_DP2TEXTURESTAGESTATE,*LPD3DHAL_DP2TEXTURESTAGESTATE;
} D3DHAL_DP2TEXTURESTAGESTATE, *LPD3DHAL_DP2TEXTURESTAGESTATE;
#define D3DTSS_TEXTUREMAP 0
@@ -519,49 +510,49 @@ typedef struct _D3DHAL_DP2VIEWPORTINFO {
DWORD dwY;
DWORD dwWidth;
DWORD dwHeight;
} D3DHAL_DP2VIEWPORTINFO,*LPD3DHAL_DP2VIEWPORTINFO;
} D3DHAL_DP2VIEWPORTINFO, *LPD3DHAL_DP2VIEWPORTINFO;
typedef struct _D3DHAL_DP2WINFO {
D3DVALUE dwWNear;
D3DVALUE dwWFar;
} D3DHAL_DP2WINFO,*LPD3DHAL_DP2WINFO;
} D3DHAL_DP2WINFO, *LPD3DHAL_DP2WINFO;
typedef struct _D3DHAL_DP2SETPALETTE {
DWORD dwPaletteHandle;
DWORD dwPaletteFlags;
DWORD dwSurfaceHandle;
} D3DHAL_DP2SETPALETTE,*LPD3DHAL_DP2SETPALETTE;
} D3DHAL_DP2SETPALETTE, *LPD3DHAL_DP2SETPALETTE;
typedef struct _D3DHAL_DP2UPDATEPALETTE {
DWORD dwPaletteHandle;
WORD wStartIndex;
WORD wNumEntries;
} D3DHAL_DP2UPDATEPALETTE,*LPD3DHAL_DP2UPDATEPALETTE;
WORD wStartIndex;
WORD wNumEntries;
} D3DHAL_DP2UPDATEPALETTE, *LPD3DHAL_DP2UPDATEPALETTE;
typedef struct _D3DHAL_DP2ZRANGE {
D3DVALUE dvMinZ;
D3DVALUE dvMaxZ;
} D3DHAL_DP2ZRANGE,*LPD3DHAL_DP2ZRANGE;
} D3DHAL_DP2ZRANGE, *LPD3DHAL_DP2ZRANGE;
typedef D3DMATERIAL7 D3DHAL_DP2SETMATERIAL,*LPD3DHAL_DP2SETMATERIAL;
typedef struct _D3DHAL_DP2SETLIGHT {
DWORD dwIndex;
DWORD dwDataType;
} D3DHAL_DP2SETLIGHT,*LPD3DHAL_DP2SETLIGHT;
} D3DHAL_DP2SETLIGHT, *LPD3DHAL_DP2SETLIGHT;
#define D3DHAL_SETLIGHT_ENABLE 0
#define D3DHAL_SETLIGHT_DISABLE 1
#define D3DHAL_SETLIGHT_DATA 2
#define D3DHAL_SETLIGHT_ENABLE 0
#define D3DHAL_SETLIGHT_DISABLE 1
#define D3DHAL_SETLIGHT_DATA 2
typedef struct _D3DHAL_DP2CREATELIGHT {
DWORD dwIndex;
} D3DHAL_DP2CREATELIGHT,*LPD3DHAL_DP2CREATELIGHT;
} D3DHAL_DP2CREATELIGHT, *LPD3DHAL_DP2CREATELIGHT;
typedef struct _D3DHAL_DP2SETTRANSFORM {
D3DTRANSFORMSTATETYPE xfrmType;
D3DMATRIX matrix;
} D3DHAL_DP2SETTRANSFORM,*LPD3DHAL_DP2SETTRANSFORM;
D3DTRANSFORMSTATETYPE xfrmType;
D3DMATRIX matrix;
} D3DHAL_DP2SETTRANSFORM, *LPD3DHAL_DP2SETTRANSFORM;
typedef struct _D3DHAL_DP2TEXBLT {
DWORD dwDDDestSurface;
@@ -569,72 +560,72 @@ typedef struct _D3DHAL_DP2TEXBLT {
POINT pDest;
RECTL rSrc;
DWORD dwFlags;
} D3DHAL_DP2TEXBLT,*LPD3DHAL_DP2TEXBLT;
} D3DHAL_DP2TEXBLT, *LPD3DHAL_DP2TEXBLT;
typedef struct _D3DHAL_DP2STATESET {
DWORD dwOperation;
DWORD dwParam;
D3DSTATEBLOCKTYPE sbType;
} D3DHAL_DP2STATESET,*LPD3DHAL_DP2STATESET;
DWORD dwOperation;
DWORD dwParam;
D3DSTATEBLOCKTYPE sbType;
} D3DHAL_DP2STATESET, *LPD3DHAL_DP2STATESET;
#define D3DHAL_STATESETBEGIN 0
#define D3DHAL_STATESETEND 1
#define D3DHAL_STATESETDELETE 2
#define D3DHAL_STATESETEXECUTE 3
#define D3DHAL_STATESETCAPTURE 4
#define D3DHAL_STATESETBEGIN 0
#define D3DHAL_STATESETEND 1
#define D3DHAL_STATESETDELETE 2
#define D3DHAL_STATESETEXECUTE 3
#define D3DHAL_STATESETCAPTURE 4
typedef struct _D3DHAL_DP2SETPRIORITY {
DWORD dwDDSurface;
DWORD dwPriority;
} D3DHAL_DP2SETPRIORITY,*LPD3DHAL_DP2SETPRIORITY;
} D3DHAL_DP2SETPRIORITY, *LPD3DHAL_DP2SETPRIORITY;
typedef struct _D3DHAL_DP2SETRENDERTARGET {
DWORD hRenderTarget;
DWORD hZBuffer;
} D3DHAL_DP2SETRENDERTARGET,*LPD3DHAL_DP2SETRENDERTARGET;
} D3DHAL_DP2SETRENDERTARGET, *LPD3DHAL_DP2SETRENDERTARGET;
typedef struct _D3DHAL_DP2CLEAR {
DWORD dwFlags;
DWORD dwFillColor;
D3DVALUE dvFillDepth;
DWORD dwFillStencil;
RECT Rects[1];
} D3DHAL_DP2CLEAR,*LPD3DHAL_DP2CLEAR;
DWORD dwFlags;
DWORD dwFillColor;
D3DVALUE dvFillDepth;
DWORD dwFillStencil;
RECT Rects[1];
} D3DHAL_DP2CLEAR, *LPD3DHAL_DP2CLEAR;
typedef struct _D3DHAL_DP2SETTEXLOD {
DWORD dwDDSurface;
DWORD dwLOD;
} D3DHAL_DP2SETTEXLOD,*LPD3DHAL_DP2SETTEXLOD;
} D3DHAL_DP2SETTEXLOD, *LPD3DHAL_DP2SETTEXLOD;
#if (DIRECT3D_VERSION >= 0x0900)
#define DX9_DDI_VERSION 4
#define DX9_DDI_VERSION 4
#ifndef D3DVTXPCAPS_NO_VSDT_UBYTE4
#define D3DVTXPCAPS_NO_VSDT_UBYTE4 0x00000080
#define D3DVTXPCAPS_NO_VSDT_UBYTE4 0x00000080
#endif
#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004
#ifndef D3DPMISCCAPS_LINEPATTERNREP
#define D3DPMISCCAPS_LINEPATTERNREP 0x00000004
#endif
#define D3DDEVCAPS_HWVERTEXBUFFER 0x02000000
#define D3DDEVCAPS_HWINDEXBUFFER 0x04000000
#define D3DDEVCAPS_SUBVOLUMELOCK 0x08000000
#define D3DDEVCAPS_HWVERTEXBUFFER 0x02000000
#define D3DDEVCAPS_HWINDEXBUFFER 0x04000000
#define D3DDEVCAPS_SUBVOLUMELOCK 0x08000000
#ifndef D3DPMISCCAPS_FOGINFVF
#define D3DPMISCCAPS_FOGINFVF 0x00002000
#define D3DPMISCCAPS_FOGINFVF 0x00002000
#endif
#ifndef D3DFVF_FOG
#define D3DFVF_FOG 0x00002000
#define D3DFVF_FOG 0x00002000
#endif
typedef struct _DD_GETDRIVERINFO2DATA
{
DWORD dwReserved;
DWORD dwMagic;
DWORD dwType;
DWORD dwExpectedSize;
typedef struct _DD_GETDRIVERINFO2DATA {
DWORD dwReserved;
DWORD dwMagic;
DWORD dwType;
DWORD dwExpectedSize;
} DD_GETDRIVERINFO2DATA;
/**
@@ -642,19 +633,19 @@ typedef struct _DD_GETDRIVERINFO2DATA
* D3DGDI2_MAGIC to see if the passed GUID is GUID_GetDriverInfo2
* or a GUID_DDStereoMode.
*/
#define GUID_GetDriverInfo2 GUID_DDStereoMode
#define GUID_GetDriverInfo2 GUID_DDStereoMode
/**
* Magic number used in DD_GETDRIVERINFO2DATA.dwHeight when
* GUID_GetDriverInfo2/GUID_DDStereoMode is specified in a
* GetDriverInfo call.
*/
#define D3DGDI2_MAGIC 0xFFFFFFFF
#define D3DGDI2_MAGIC 0xFFFFFFFF
#define D3DGDI2_TYPE_GETD3DCAPS8 0x00000001
#define D3DGDI2_TYPE_GETFORMATCOUNT 0x00000002
#define D3DGDI2_TYPE_GETFORMAT 0x00000003
#define D3DGDI2_TYPE_DXVERSION 0x00000004 /* Make driver aware of currently used DirectX version */
#define D3DGDI2_TYPE_DXVERSION 0x00000004 /* Make driver aware of currently used DirectX version */
#define D3DGDI2_TYPE_GETD3DCAPS9 0x00000010
#define D3DGDI2_TYPE_GETEXTENDEDMODECOUNT 0x00000011
#define D3DGDI2_TYPE_GETEXTENDEDMODE 0x00000012
@@ -665,10 +656,9 @@ typedef struct _DD_GETDRIVERINFO2DATA
#define D3DGDI2_TYPE_DEFER_AGP_FREES 0x00000020
#define D3DGDI2_TYPE_GETD3DQUERYCOUNT 0x00000021
#define D3DGDI2_TYPE_GETD3DQUERY 0x00000022
#define D3DGDI2_TYPE_GETDDIVERSION 0x00000023 /* Returns DX9_DDI_VERSION, used to check which DDK version the driver is compiled against */
#define D3DGDI2_TYPE_GETDDIVERSION 0x00000023 /* Returns DX9_DDI_VERSION, used to check which DDK version the driver is compiled against */
typedef struct _D3DCAPS8
{
typedef struct _D3DCAPS8 {
D3DDEVTYPE DeviceType;
UINT AdapterOrdinal;
DWORD Caps;
@@ -724,90 +714,77 @@ typedef struct _D3DCAPS8
float MaxPixelShaderValue;
} D3DCAPS8;
typedef struct _DD_GETFORMATCOUNTDATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwFormatCount;
DWORD dwReserved;
typedef struct _DD_GETFORMATCOUNTDATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwFormatCount;
DWORD dwReserved;
} DD_GETFORMATCOUNTDATA;
typedef struct _DD_GETFORMATDATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwFormatIndex;
DDPIXELFORMAT format;
typedef struct _DD_GETFORMATDATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwFormatIndex;
DDPIXELFORMAT format;
} DD_GETFORMATDATA;
typedef struct _DD_DXVERSION
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwDXVersion;
DWORD dwReserved;
typedef struct _DD_DXVERSION {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwDXVersion;
DWORD dwReserved;
} DD_DXVERSION;
typedef struct _DD_DEFERRED_AGP_AWARE_DATA
{
DD_GETDRIVERINFO2DATA gdi2;
typedef struct _DD_DEFERRED_AGP_AWARE_DATA {
DD_GETDRIVERINFO2DATA gdi2;
} DD_DEFERRED_AGP_AWARE_DATA;
typedef struct _DD_FREE_DEFERRED_AGP_DATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwProcessId;
typedef struct _DD_FREE_DEFERRED_AGP_DATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwProcessId;
} DD_FREE_DEFERRED_AGP_DATA;
typedef struct _DD_GETEXTENDEDMODECOUNTDATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwModeCount;
DWORD dwReserved;
typedef struct _DD_GETEXTENDEDMODECOUNTDATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwModeCount;
DWORD dwReserved;
} DD_GETEXTENDEDMODECOUNTDATA;
typedef struct _DD_GETEXTENDEDMODEDATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwModeIndex;
D3DDISPLAYMODE mode;
typedef struct _DD_GETEXTENDEDMODEDATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwModeIndex;
D3DDISPLAYMODE mode;
} DD_GETEXTENDEDMODEDATA;
typedef struct _DD_GETADAPTERGROUPDATA
{
DD_GETDRIVERINFO2DATA gdi2;
ULONG_PTR ulUniqueAdapterGroupId;
DWORD dwReserved1;
DWORD dwReserved2;
typedef struct _DD_GETADAPTERGROUPDATA {
DD_GETDRIVERINFO2DATA gdi2;
ULONG_PTR ulUniqueAdapterGroupId;
DWORD dwReserved1;
DWORD dwReserved2;
} DD_GETADAPTERGROUPDATA;
typedef struct _DD_MULTISAMPLEQUALITYLEVELSDATA
{
DD_GETDRIVERINFO2DATA gdi2;
D3DFORMAT Format;
BOOL bFlip : 1;
D3DMULTISAMPLE_TYPE MSType : 31;
DWORD QualityLevels;
typedef struct _DD_MULTISAMPLEQUALITYLEVELSDATA {
DD_GETDRIVERINFO2DATA gdi2;
D3DFORMAT Format;
WINBOOL bFlip : 1;
D3DMULTISAMPLE_TYPE MSType : 31;
DWORD QualityLevels;
} DD_MULTISAMPLEQUALITYLEVELSDATA;
typedef struct _DD_GETD3DQUERYCOUNTDATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwNumQueries;
typedef struct _DD_GETD3DQUERYCOUNTDATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwNumQueries;
} DD_GETD3DQUERYCOUNTDATA;
typedef struct _DD_GETD3DQUERYDATA
{
DD_GETDRIVERINFO2DATA gdi2;
__GNU_EXTENSION union
{
DWORD dwQueryIndex;
D3DQUERYTYPE QueryType;
};
typedef struct _DD_GETD3DQUERYDATA {
DD_GETDRIVERINFO2DATA gdi2;
__GNU_EXTENSION union {
DWORD dwQueryIndex;
D3DQUERYTYPE QueryType;
};
} DD_GETD3DQUERYDATA;
typedef struct _DD_GETDDIVERSIONDATA
{
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwDXVersion;
DWORD dwDDIVersion;
typedef struct _DD_GETDDIVERSIONDATA {
DD_GETDRIVERINFO2DATA gdi2;
DWORD dwDXVersion;
DWORD dwDDIVersion;
} DD_GETDDIVERSIONDATA;
#endif /* (DIRECT3D_VERSION >= 0x0900) */
+2 -2
View File
@@ -1,10 +1,10 @@
#ifndef _D3DHALEX_H
#define _D3DHALEX_H
#define D3DGDI_IS_GDI2(pData) ((((DD_GETDRIVERINFO2DATA*)(pData->lpvData))->dwMagic) == D3DGDI2_MAGIC)
#define D3DGDI_IS_STEREOMODE(pData) ((((DD_STEREOMODE*) (pData->lpvData))->dwHeight) != D3DGDI2_MAGIC)
#define D3DGDI_GET_GDI2_DATA(pData) (D3DGDI_IS_GDI2(pData) ? (((DD_GETDRIVERINFO2DATA*)(pData->lpvData))) : NULL)
#define D3DGDI_GET_STEREOMODE_DATA(pData) (D3DGDI_IS_STEREOMODE(pData) ? (((DD_STEREOMODE*)(pData->lpvData))) : NULL)
#endif
#endif /* _D3DHALEX_H */
-272
View File
@@ -1,272 +0,0 @@
/*
* Direct3D NT driver interface
*/
#ifndef __DDK_D3DNTHAL_H
#define __DDK_D3DNTHAL_H
#include <ddrawint.h>
#include <d3dtypes.h>
#include <d3dcaps.h>
/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
#else
#define __GNU_EXTENSION
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
DEFINE_GUID(GUID_D3DCallbacks, 0x7BF06990, 0x8794, 0x11D0, 0x91, 0x39, 0x08, 0x00, 0x36, 0xD2, 0xEF, 0x02);
DEFINE_GUID(GUID_D3DCallbacks3, 0xDDF41230, 0xEC0A, 0x11D0, 0xA9, 0xB6, 0x00, 0xAA, 0x00, 0xC0, 0x99, 0x3E);
DEFINE_GUID(GUID_D3DExtendedCaps, 0x7DE41F80, 0x9D93, 0x11D0, 0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29);
DEFINE_GUID(GUID_D3DParseUnknownCommandCallback, 0x2E04FFA0, 0x98E4, 0x11D1, 0x8C, 0xE1, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8);
DEFINE_GUID(GUID_ZPixelFormats, 0x93869880, 0x36CF, 0x11D1, 0x9B, 0x1B, 0x00, 0xAA, 0x00, 0xBB, 0xB8, 0xAE);
DEFINE_GUID(GUID_DDStereoMode, 0xF828169C, 0xA8E8, 0x11D2, 0xA1, 0xF2, 0x00, 0xA0, 0xC9, 0x83, 0xEA, 0xF6);
typedef struct _D3DNTHAL_CONTEXTCREATEDATA
{
__GNU_EXTENSION union
{
PDD_DIRECTDRAW_GLOBAL lpDDGbl;
PDD_DIRECTDRAW_LOCAL lpDDLcl;
};
__GNU_EXTENSION union
{
PDD_SURFACE_LOCAL lpDDS;
PDD_SURFACE_LOCAL lpDDSLcl;
};
__GNU_EXTENSION union
{
PDD_SURFACE_LOCAL lpDDSZ;
PDD_SURFACE_LOCAL lpDDSZLcl;
};
DWORD dwPID;
ULONG_PTR dwhContext;
HRESULT ddrval;
} D3DNTHAL_CONTEXTCREATEDATA, *LPD3DNTHAL_CONTEXTCREATEDATA;
typedef struct _D3DNTHAL_CONTEXTDESTROYDATA
{
ULONG_PTR dwhContext;
HRESULT ddrval;
} D3DNTHAL_CONTEXTDESTROYDATA, *LPD3DNTHAL_CONTEXTDESTROYDATA;
typedef struct _D3DNTHAL_CONTEXTDESTROYALLDATA
{
DWORD dwPID;
HRESULT ddrval;
} D3DNTHAL_CONTEXTDESTROYALLDATA, *LPD3DNTHAL_CONTEXTDESTROYALLDATA;
typedef struct _D3DNTHAL_SCENECAPTUREDATA
{
ULONG_PTR dwhContext;
DWORD dwFlag;
HRESULT ddrval;
} D3DNTHAL_SCENECAPTUREDATA, *LPD3DNTHAL_SCENECAPTUREDATA;
typedef struct _D3DNTHAL_TEXTURECREATEDATA
{
ULONG_PTR dwhContext;
HANDLE hDDS;
ULONG_PTR dwHandle;
HRESULT ddrval;
} D3DNTHAL_TEXTURECREATEDATA, *LPD3DNTHAL_TEXTURECREATEDATA;
typedef struct _D3DNTHAL_TEXTUREDESTROYDATA
{
ULONG_PTR dwhContext;
ULONG_PTR dwHandle;
HRESULT ddrval;
} D3DNTHAL_TEXTUREDESTROYDATA, *LPD3DNTHAL_TEXTUREDESTROYDATA;
typedef struct _D3DNTHAL_TEXTURESWAPDATA
{
ULONG_PTR dwhContext;
ULONG_PTR dwHandle1;
ULONG_PTR dwHandle2;
HRESULT ddrval;
} D3DNTHAL_TEXTURESWAPDATA, *LPD3DNTHAL_TEXTURESWAPDATA;
typedef struct _D3DNTHAL_TEXTUREGETSURFDATA
{
ULONG_PTR dwhContext;
HANDLE hDDS;
ULONG_PTR dwHandle;
HRESULT ddrval;
} D3DNTHAL_TEXTUREGETSURFDATA, *LPD3DNTHAL_TEXTUREGETSURFDATA;
typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTCREATECB)(LPD3DNTHAL_CONTEXTCREATEDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYCB)(LPD3DNTHAL_CONTEXTDESTROYDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_CONTEXTDESTROYALLCB)(LPD3DNTHAL_CONTEXTDESTROYALLDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_SCENECAPTURECB)(LPD3DNTHAL_SCENECAPTUREDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURECREATECB)(LPD3DNTHAL_TEXTURECREATEDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREDESTROYCB)(LPD3DNTHAL_TEXTUREDESTROYDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTURESWAPCB)(LPD3DNTHAL_TEXTURESWAPDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_TEXTUREGETSURFCB)(LPD3DNTHAL_TEXTUREGETSURFDATA);
typedef struct _D3DNTHALDeviceDesc_V1
{
DWORD dwSize;
DWORD dwFlags;
D3DCOLORMODEL dcmColorModel;
DWORD dwDevCaps;
D3DTRANSFORMCAPS dtcTransformCaps;
BOOL bClipping;
D3DLIGHTINGCAPS dlcLightingCaps;
D3DPRIMCAPS dpcLineCaps;
D3DPRIMCAPS dpcTriCaps;
DWORD dwDeviceRenderBitDepth;
DWORD dwDeviceZBufferBitDepth;
DWORD dwMaxBufferSize;
DWORD dwMaxVertexCount;
} D3DNTHALDEVICEDESC_V1, *LPD3DNTHALDEVICEDESC_V1;
typedef struct _D3DNTHAL_GLOBALDRIVERDATA
{
DWORD dwSize;
D3DNTHALDEVICEDESC_V1 hwCaps;
DWORD dwNumVertices;
DWORD dwNumClipVertices;
DWORD dwNumTextureFormats;
LPDDSURFACEDESC lpTextureFormats;
} D3DNTHAL_GLOBALDRIVERDATA, *LPD3DNTHAL_GLOBALDRIVERDATA;
typedef struct _D3DNTHAL_CALLBACKS
{
DWORD dwSize;
LPD3DNTHAL_CONTEXTCREATECB ContextCreate;
LPD3DNTHAL_CONTEXTDESTROYCB ContextDestroy;
LPD3DNTHAL_CONTEXTDESTROYALLCB ContextDestroyAll;
LPD3DNTHAL_SCENECAPTURECB SceneCapture;
LPVOID dwReserved10;
LPVOID dwReserved11;
LPVOID dwReserved22;
LPVOID dwReserved23;
ULONG_PTR dwReserved;
LPD3DNTHAL_TEXTURECREATECB TextureCreate;
LPD3DNTHAL_TEXTUREDESTROYCB TextureDestroy;
LPD3DNTHAL_TEXTURESWAPCB TextureSwap;
LPD3DNTHAL_TEXTUREGETSURFCB TextureGetSurf;
LPVOID dwReserved12;
LPVOID dwReserved13;
LPVOID dwReserved14;
LPVOID dwReserved15;
LPVOID dwReserved16;
LPVOID dwReserved17;
LPVOID dwReserved18;
LPVOID dwReserved19;
LPVOID dwReserved20;
LPVOID dwReserved21;
LPVOID dwReserved24;
ULONG_PTR dwReserved0;
ULONG_PTR dwReserved1;
ULONG_PTR dwReserved2;
ULONG_PTR dwReserved3;
ULONG_PTR dwReserved4;
ULONG_PTR dwReserved5;
ULONG_PTR dwReserved6;
ULONG_PTR dwReserved7;
ULONG_PTR dwReserved8;
ULONG_PTR dwReserved9;
} D3DNTHAL_CALLBACKS, *LPD3DNTHAL_CALLBACKS;
typedef struct _D3DNTHAL_SETRENDERTARGETDATA
{
ULONG_PTR dwhContext;
PDD_SURFACE_LOCAL lpDDS;
PDD_SURFACE_LOCAL lpDDSZ;
HRESULT ddrval;
} D3DNTHAL_SETRENDERTARGETDATA;
typedef D3DNTHAL_SETRENDERTARGETDATA *LPD3DNTHAL_SETRENDERTARGETDATA;
typedef DWORD (APIENTRY *LPD3DNTHAL_SETRENDERTARGETCB)(LPD3DNTHAL_SETRENDERTARGETDATA);
typedef struct _D3DNTHAL_CALLBACKS2
{
DWORD dwSize;
DWORD dwFlags;
LPD3DNTHAL_SETRENDERTARGETCB SetRenderTarget;
LPVOID dwReserved1;
LPVOID dwReserved2;
LPVOID dwReserved3;
LPVOID dwReserved4;
} D3DNTHAL_CALLBACKS2, *LPD3DNTHAL_CALLBACKS2;
typedef struct _D3DNTHAL_CLEAR2DATA
{
ULONG_PTR dwhContext;
DWORD dwFlags;
DWORD dwFillColor;
D3DVALUE dvFillDepth;
DWORD dwFillStencil;
LPD3DRECT lpRects;
DWORD dwNumRects;
HRESULT ddrval;
} D3DNTHAL_CLEAR2DATA;
typedef D3DNTHAL_CLEAR2DATA FAR *LPD3DNTHAL_CLEAR2DATA;
typedef struct _D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA
{
ULONG_PTR dwhContext;
DWORD dwFlags;
ULONG_PTR dwReserved;
DWORD dwNumPasses;
HRESULT ddrval;
} D3DNTHAL_VALIDATETEXTURESTAGESTATEDATA, FAR *LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA;
typedef struct _D3DNTHAL_DRAWPRIMITIVES2DATA
{
ULONG_PTR dwhContext;
DWORD dwFlags;
DWORD dwVertexType;
PDD_SURFACE_LOCAL lpDDCommands;
DWORD dwCommandOffset;
DWORD dwCommandLength;
__GNU_EXTENSION union
{
PDD_SURFACE_LOCAL lpDDVertex;
LPVOID lpVertices;
};
DWORD dwVertexOffset;
DWORD dwVertexLength;
DWORD dwReqVertexBufSize;
DWORD dwReqCommandBufSize;
LPDWORD lpdwRStates;
__GNU_EXTENSION union
{
DWORD dwVertexSize;
HRESULT ddrval;
};
DWORD dwErrorOffset;
} D3DNTHAL_DRAWPRIMITIVES2DATA, FAR *LPD3DNTHAL_DRAWPRIMITIVES2DATA;
typedef DWORD (APIENTRY *LPD3DNTHAL_CLEAR2CB)(LPD3DNTHAL_CLEAR2DATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB)(LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA);
typedef DWORD (APIENTRY *LPD3DNTHAL_DRAWPRIMITIVES2CB)(LPD3DNTHAL_DRAWPRIMITIVES2DATA);
typedef struct _D3DNTHAL_CALLBACKS3
{
DWORD dwSize;
DWORD dwFlags;
LPD3DNTHAL_CLEAR2CB Clear2;
LPVOID lpvReserved;
LPD3DNTHAL_VALIDATETEXTURESTAGESTATECB ValidateTextureStageState;
LPD3DNTHAL_DRAWPRIMITIVES2CB DrawPrimitives2;
} D3DNTHAL_CALLBACKS3, *LPD3DNTHAL_CALLBACKS3;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __DDK_D3DNTHAL_H */
-97
View File
@@ -1,97 +0,0 @@
/* $Id$
*
* COPYRIGHT: This file is in the public domain.
* PROJECT: ReactOS kernel
* FILE:
* PURPOSE: Directx headers
* PROGRAMMER: Magnus Olsen (greatlrd)
*
*/
#ifndef __DDKM_INCLUDED__
#define __DDKM_INCLUDED__
#if defined (_WIN32) && !defined (_NO_COM)
DEFINE_GUID (IID_IDirectDrawKernel, 0x8D56C120,0x6A08,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
DEFINE_GUID (IID_IDirectDrawSurfaceKernel, 0x60755DA0,0x6A40,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
#endif
typedef struct _DDKERNELCAPS
{
DWORD dwSize;
DWORD dwCaps;
DWORD dwIRQCaps;
} DDKERNELCAPS, *LPDDKERNELCAPS;
#define DDKERNELCAPS_SKIPFIELDS 0x00000001
#define DDKERNELCAPS_AUTOFLIP 0x00000002
#define DDKERNELCAPS_SETSTATE 0x00000004
#define DDKERNELCAPS_LOCK 0x00000008
#define DDKERNELCAPS_FLIPVIDEOPORT 0x00000010
#define DDKERNELCAPS_FLIPOVERLAY 0x00000020
#define DDKERNELCAPS_CAPTURE_SYSMEM 0x00000040
#define DDKERNELCAPS_CAPTURE_NONLOCALVIDMEM 0x00000080
#define DDKERNELCAPS_FIELDPOLARITY 0x00000100
#define DDKERNELCAPS_CAPTURE_INVERTED 0x00000200
#define DDIRQ_DISPLAY_VSYNC 0x00000001
#define DDIRQ_RESERVED1 0x00000002
#define DDIRQ_VPORT0_VSYNC 0x00000004
#define DDIRQ_VPORT0_LINE 0x00000008
#define DDIRQ_VPORT1_VSYNC 0x00000010
#define DDIRQ_VPORT1_LINE 0x00000020
#define DDIRQ_VPORT2_VSYNC 0x00000040
#define DDIRQ_VPORT2_LINE 0x00000080
#define DDIRQ_VPORT3_VSYNC 0x00000100
#define DDIRQ_VPORT3_LINE 0x00000200
#define DDIRQ_VPORT4_VSYNC 0x00000400
#define DDIRQ_VPORT4_LINE 0x00000800
#define DDIRQ_VPORT5_VSYNC 0x00001000
#define DDIRQ_VPORT5_LINE 0x00002000
#define DDIRQ_VPORT6_VSYNC 0x00004000
#define DDIRQ_VPORT6_LINE 0x00008000
#define DDIRQ_VPORT7_VSYNC 0x00010000
#define DDIRQ_VPORT7_LINE 0x00020000
#define DDIRQ_VPORT8_VSYNC 0x00040000
#define DDIRQ_VPORT8_LINE 0x00080000
#define DDIRQ_VPORT9_VSYNC 0x00010000
#define DDIRQ_VPORT9_LINE 0x00020000
typedef struct IDirectDrawKernel* LPDIRECTDRAWKERNEL;
typedef struct IDirectDrawSurfaceKernel* LPDIRECTDRAWSURFACEKERNEL;
#if defined(_WIN32) && !defined(_NO_COM)
#undef INTERFACE
#define INTERFACE IDirectDrawKernel
DECLARE_INTERFACE_ (IDirectDrawKernel, IUnknown)
{
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(GetKernelHandle) (THIS_ ULONG*) PURE;
STDMETHOD(ReleaseKernelHandle) (THIS) PURE;
};
#undef INTERFACE
#define INTERFACE IDirectDrawSurfaceKernel
DECLARE_INTERFACE_ (IDirectDrawSurfaceKernel, IUnknown)
{
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
STDMETHOD(GetKernelHandle) (THIS_ ULONG*) PURE;
STDMETHOD(ReleaseKernelHandle) (THIS) PURE;
};
#undef INTERFACE
#endif // defined(_WIN32) && !defined(_NO_COM)
#ifdef __cplusplus
};
#endif
#endif
-2204
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+142 -170
View File
@@ -7,33 +7,30 @@
typedef LONGLONG REFERENCE_TIME;
#endif
typedef struct _DMUS_KERNEL_EVENT
{
BYTE bReserved;
BYTE cbStruct;
USHORT cbEvent;
USHORT usChannelGroup;
USHORT usFlags;
REFERENCE_TIME ullPresTime100ns;
ULONGLONG ullBytePosition;
struct _DMUS_KERNEL_EVENT *pNextEvt;
union
{
BYTE abData[sizeof(PBYTE)];
PBYTE pbData;
struct _DMUS_KERNEL_EVENT *pPackageEvt;
}uData;
}DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT;
typedef struct _DMUS_KERNEL_EVENT {
BYTE bReserved;
BYTE cbStruct;
USHORT cbEvent;
USHORT usChannelGroup;
USHORT usFlags;
REFERENCE_TIME ullPresTime100ns;
ULONGLONG ullBytePosition;
struct _DMUS_KERNEL_EVENT *pNextEvt;
union {
BYTE abData[sizeof(PBYTE)];
PBYTE pbData;
struct _DMUS_KERNEL_EVENT *pPackageEvt;
} uData;
} DMUS_KERNEL_EVENT, *PDMUS_KERNEL_EVENT;
typedef enum
{
DMUS_STREAM_MIDI_INVALID = -1,
DMUS_STREAM_MIDI_RENDER = 0,
DMUS_STREAM_MIDI_CAPTURE,
DMUS_STREAM_WAVE_SINK
}DMUS_STREAM_TYPE;
typedef enum {
DMUS_STREAM_MIDI_INVALID = -1,
DMUS_STREAM_MIDI_RENDER = 0,
DMUS_STREAM_MIDI_CAPTURE,
DMUS_STREAM_WAVE_SINK
} DMUS_STREAM_TYPE;
DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
DEFINE_GUID(CLSID_MiniportDriverDMusUART, 0xd3f0ce1c, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x81, 0xB0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1);
/* ===============================================================
@@ -43,21 +40,20 @@ DEFINE_GUID(CLSID_MiniportDriverDMusUARTCapture, 0xD3F0CE1D, 0xFFFC, 0x11D1, 0x8
#undef INTERFACE
#define INTERFACE IMasterClock
DECLARE_INTERFACE_(IMasterClock,IUnknown)
{
DEFINE_ABSTRACT_UNKNOWN()
DECLARE_INTERFACE_(IMasterClock,IUnknown) {
DEFINE_ABSTRACT_UNKNOWN()
STDMETHOD_(NTSTATUS,GetTime)( THIS_
OUT REFERENCE_TIME * pTime
) PURE;
STDMETHOD_(NTSTATUS,GetTime)( THIS_
OUT REFERENCE_TIME *pTime
) PURE;
};
typedef IMasterClock *PMASTERCLOCK;
#define IMP_IMasterClock \
STDMETHODIMP_(NTSTATUS) GetTime( \
OUT REFERENCE_TIME * pTime \
)
#define IMP_IMasterClock \
STDMETHODIMP_(NTSTATUS) GetTime( \
OUT REFERENCE_TIME *pTime \
)
/* ===============================================================
IMXF Interface
@@ -70,46 +66,32 @@ struct IMXF;
typedef struct IMXF *PMXF;
#define DEFINE_ABSTRACT_IMXF() \
STDMETHOD_(NTSTATUS,SetState)(THIS_ \
IN KSSTATE State \
) PURE; \
STDMETHOD_(NTSTATUS,PutMessage) \
( THIS_ \
IN PDMUS_KERNEL_EVENT pDMKEvt \
) PURE; \
STDMETHOD_(NTSTATUS,ConnectOutput) \
( THIS_ \
IN PMXF sinkMXF \
) PURE; \
STDMETHOD_(NTSTATUS,DisconnectOutput) \
( THIS_ \
IN PMXF sinkMXF \
) PURE;
STDMETHOD_(NTSTATUS,SetState)(THIS_ \
IN KSSTATE State \
) PURE; \
STDMETHOD_(NTSTATUS,PutMessage)(THIS_ \
IN PDMUS_KERNEL_EVENT pDMKEvt \
) PURE; \
STDMETHOD_(NTSTATUS,ConnectOutput)(THIS_ \
IN PMXF sinkMXF \
) PURE; \
STDMETHOD_(NTSTATUS,DisconnectOutput)(THIS_ \
IN PMXF sinkMXF \
) PURE;
#define IMP_IMXF \
STDMETHODIMP_(NTSTATUS) SetState \
( \
IN KSSTATE State \
); \
STDMETHODIMP_(NTSTATUS) PutMessage \
( THIS_ \
IN PDMUS_KERNEL_EVENT pDMKEvt \
); \
STDMETHODIMP_(NTSTATUS) ConnectOutput \
( THIS_ \
IN PMXF sinkMXF \
); \
STDMETHODIMP_(NTSTATUS) DisconnectOutput \
( THIS_ \
IN PMXF sinkMXF \
)
#define IMP_IMXF \
STDMETHODIMP_(NTSTATUS) SetState ( \
IN KSSTATE State); \
STDMETHODIMP_(NTSTATUS) PutMessage (THIS_ \
IN PDMUS_KERNEL_EVENT pDMKEvt); \
STDMETHODIMP_(NTSTATUS) ConnectOutput (THIS_ \
IN PMXF sinkMXF); \
STDMETHODIMP_(NTSTATUS) DisconnectOutput (THIS_ \
IN PMXF sinkMXF)
DECLARE_INTERFACE_(IMXF,IUnknown)
{
DEFINE_ABSTRACT_UNKNOWN()
DEFINE_ABSTRACT_IMXF()
DECLARE_INTERFACE_(IMXF,IUnknown) {
DEFINE_ABSTRACT_UNKNOWN()
DEFINE_ABSTRACT_IMXF()
};
/* ===============================================================
@@ -123,47 +105,43 @@ struct IAllocatorMXF;
typedef struct IAllocatorMXF *PAllocatorMXF;
#define STATIC_IID_IAllocatorMXF\
0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1
0xa5f0d62c, 0xb30f, 0x11d2, 0xb7, 0xa3, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1
DEFINE_GUIDSTRUCT("a5f0d62c-b30f-11d2-b7a3-0060083316c1", IID_IAllocatorMXF);
#define IID_IAllocatorMXF DEFINE_GUIDNAMED(IID_IAllocatorMXF)
DECLARE_INTERFACE_(IAllocatorMXF, IMXF)
{
DEFINE_ABSTRACT_UNKNOWN()
DECLARE_INTERFACE_(IAllocatorMXF, IMXF) {
DEFINE_ABSTRACT_UNKNOWN()
DEFINE_ABSTRACT_IMXF()
DEFINE_ABSTRACT_IMXF()
STDMETHOD_(NTSTATUS,GetMessage)(THIS_
OUT PDMUS_KERNEL_EVENT * ppDMKEvt
) PURE;
STDMETHOD_(NTSTATUS,GetMessage)(THIS_
OUT PDMUS_KERNEL_EVENT *ppDMKEvt
) PURE;
STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE;
STDMETHOD_(USHORT,GetBufferSize)(THIS) PURE;
STDMETHOD_(NTSTATUS,GetBuffer)(THIS_
OUT PBYTE * ppBuffer
)PURE;
STDMETHOD_(NTSTATUS,GetBuffer)(THIS_
OUT PBYTE *ppBuffer
)PURE;
STDMETHOD_(NTSTATUS,PutBuffer)(THIS_
IN PBYTE pBuffer
) PURE;
STDMETHOD_(NTSTATUS,PutBuffer)(THIS_
IN PBYTE pBuffer
) PURE;
};
#define IMP_IAllocatorMXF \
IMP_IMXF; \
STDMETHODIMP_(NTSTATUS) GetMessage( \
OUT PDMUS_KERNEL_EVENT * ppDMKEvt \
); \
\
STDMETHODIMP_(USHORT) GetBufferSize(void); \
\
STDMETHODIMP_(NTSTATUS) GetBuffer( \
OUT PBYTE * ppBuffer \
); \
\
STDMETHODIMP_(NTSTATUS) PutBuffer( \
IN PBYTE pBuffer \
)
#define IMP_IAllocatorMXF \
IMP_IMXF; \
STDMETHODIMP_(NTSTATUS) GetMessage( \
OUT PDMUS_KERNEL_EVENT *ppDMKEvt); \
\
STDMETHODIMP_(USHORT) GetBufferSize(void); \
\
STDMETHODIMP_(NTSTATUS) GetBuffer( \
OUT PBYTE *ppBuffer); \
\
STDMETHODIMP_(NTSTATUS) PutBuffer( \
IN PBYTE pBuffer)
#undef INTERFACE
#define INTERFACE IPortDMus
@@ -171,91 +149,85 @@ DECLARE_INTERFACE_(IAllocatorMXF, IMXF)
DEFINE_GUID(IID_IPortDMus, 0xc096df9c, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
DEFINE_GUID(CLSID_PortDMus, 0xb7902fe9, 0xfb0a, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
DECLARE_INTERFACE_(IPortDMus, IPort)
{
DEFINE_ABSTRACT_UNKNOWN()
DECLARE_INTERFACE_(IPortDMus, IPort) {
DEFINE_ABSTRACT_UNKNOWN()
DEFINE_ABSTRACT_PORT()
DEFINE_ABSTRACT_PORT()
STDMETHOD_(void,Notify)(THIS_
IN PSERVICEGROUP ServiceGroup OPTIONAL
)PURE;
STDMETHOD_(void,Notify)(THIS_
IN PSERVICEGROUP ServiceGroup OPTIONAL
) PURE;
STDMETHOD_(void,RegisterServiceGroup)(THIS_
IN PSERVICEGROUP ServiceGroup
) PURE;
STDMETHOD_(void,RegisterServiceGroup)(THIS_
IN PSERVICEGROUP ServiceGroup
) PURE;
};
typedef IPortDMus *PPORTDMUS;
#define IMP_IPortDMus \
IMP_IPort; \
STDMETHODIMP_(void) Notify( \
IN PSERVICEGROUP ServiceGroup OPTIONAL \
); \
\
STDMETHODIMP_(void) RegisterServiceGroup( \
IN PSERVICEGROUP ServiceGroup \
)
#define IMP_IPortDMus \
IMP_IPort; \
STDMETHODIMP_(void) Notify( \
IN PSERVICEGROUP ServiceGroup OPTIONAL); \
\
STDMETHODIMP_(void) RegisterServiceGroup( \
IN PSERVICEGROUP ServiceGroup)
#undef INTERFACE
#define INTERFACE IMiniportDMus
DEFINE_GUID(IID_IMiniportDMus, 0xc096df9d, 0xfb09, 0x11d1, 0x81, 0xb0, 0x00, 0x60, 0x08, 0x33, 0x16, 0xc1);
DECLARE_INTERFACE_(IMiniportDMus, IMiniport)
{
DEFINE_ABSTRACT_UNKNOWN()
DEFINE_ABSTRACT_MINIPORT()
DECLARE_INTERFACE_(IMiniportDMus, IMiniport) {
DEFINE_ABSTRACT_UNKNOWN()
STDMETHOD_(NTSTATUS,Init)(THIS_
IN PUNKNOWN UnknownAdapter,
IN PRESOURCELIST ResourceList,
IN PPORTDMUS Port,
OUT PSERVICEGROUP * ServiceGroup
) PURE;
DEFINE_ABSTRACT_MINIPORT()
STDMETHOD_(void,Service)(THIS) PURE;
STDMETHOD_(NTSTATUS,Init)(THIS_
IN PUNKNOWN UnknownAdapter,
IN PRESOURCELIST ResourceList,
IN PPORTDMUS Port,
OUT PSERVICEGROUP *ServiceGroup
) PURE;
STDMETHOD_(NTSTATUS,NewStream)(THIS_
OUT PMXF * MXF,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
IN ULONG PinID,
IN DMUS_STREAM_TYPE StreamType,
IN PKSDATAFORMAT DataFormat,
OUT PSERVICEGROUP * ServiceGroup,
IN PAllocatorMXF AllocatorMXF,
IN PMASTERCLOCK MasterClock,
OUT PULONGLONG SchedulePreFetch
) PURE;
STDMETHOD_(void,Service)(THIS) PURE;
STDMETHOD_(NTSTATUS,NewStream)(THIS_
OUT PMXF *MXF,
IN PUNKNOWN OuterUnknown OPTIONAL,
IN POOL_TYPE PoolType,
IN ULONG PinID,
IN DMUS_STREAM_TYPE StreamType,
IN PKSDATAFORMAT DataFormat,
OUT PSERVICEGROUP *ServiceGroup,
IN PAllocatorMXF AllocatorMXF,
IN PMASTERCLOCK MasterClock,
OUT PULONGLONG SchedulePreFetch
) PURE;
};
typedef IMiniportDMus *PMINIPORTDMUS;
#undef INTERFACE
#define IMP_IMiniportDMus \
IMP_IMiniport; \
STDMETHODIMP_(NTSTATUS) Init( \
IN PUNKNOWN UnknownAdapter, \
IN PRESOURCELIST ResourceList, \
IN PPORTDMUS Port, \
OUT PSERVICEGROUP * ServiceGroup \
); \
\
STDMETHODIMP_(void) Service(THIS); \
\
STDMETHODIMP_(NTSTATUS) NewStream( \
OUT PMXF * MXF, \
IN PUNKNOWN OuterUnknown, \
IN POOL_TYPE PoolType, \
IN ULONG PinID, \
IN DMUS_STREAM_TYPE StreamType, \
IN PKSDATAFORMAT DataFormat, \
OUT PSERVICEGROUP * ServiceGroup, \
IN PAllocatorMXF AllocatorMXF, \
IN PMASTERCLOCK MasterClock, \
OUT PULONGLONG SchedulePreFetch \
)
#define IMP_IMiniportDMus \
IMP_IMiniport; \
STDMETHODIMP_(NTSTATUS) Init( \
IN PUNKNOWN UnknownAdapter, \
IN PRESOURCELIST ResourceList, \
IN PPORTDMUS Port, \
OUT PSERVICEGROUP *ServiceGroup); \
\
STDMETHODIMP_(void) Service(THIS); \
\
STDMETHODIMP_(NTSTATUS) NewStream( \
OUT PMXF *MXF, \
IN PUNKNOWN OuterUnknown, \
IN POOL_TYPE PoolType, \
IN ULONG PinID, \
IN DMUS_STREAM_TYPE StreamType, \
IN PKSDATAFORMAT DataFormat, \
OUT PSERVICEGROUP *ServiceGroup, \
IN PAllocatorMXF AllocatorMXF, \
IN PMASTERCLOCK MasterClock, \
OUT PULONGLONG SchedulePreFetch)
#endif
#endif /* _DMUSICKS_ */
-2
View File
@@ -1,4 +1,2 @@
/* This are empty and is left for be compatible with building some older windows nt4/2000/2003/XP drivers */
+44 -51
View File
@@ -8,19 +8,17 @@
#ifndef DRMK_H
#define DRMK_H
typedef struct
{
DWORD Flags;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
PVOID Context;
typedef struct {
DWORD Flags;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
PVOID Context;
} DRMFORWARD, *PDRMFORWARD, *PCDRMFORWARD;
typedef struct
{
BOOL CopyProtect;
ULONG Reserved;
BOOL DigitalOutputDisable;
typedef struct {
BOOL CopyProtect;
ULONG Reserved;
BOOL DigitalOutputDisable;
} DRMRIGHTS, *PDRMRIGHTS;
typedef const DRMRIGHTS *PCDRMRIGHTS;
@@ -31,87 +29,82 @@ typedef const DRMRIGHTS *PCDRMRIGHTS;
*/
#ifdef __cplusplus
extern "C"
{
extern "C" {
#endif
NTSTATUS
NTAPI
DrmAddContentHandlers(
IN ULONG ContentId,
IN PVOID *paHandlers,
IN ULONG NumHandlers);
IN ULONG ContentId,
IN PVOID *paHandlers,
IN ULONG NumHandlers);
NTSTATUS
NTAPI
DrmCreateContentMixed(
IN PULONG paContentId,
IN ULONG cContentId,
OUT PULONG pMixedContentId);
IN PULONG paContentId,
IN ULONG cContentId,
OUT PULONG pMixedContentId);
NTSTATUS
NTAPI
DrmDestroyContent(
IN ULONG ContentId);
IN ULONG ContentId);
NTSTATUS
NTAPI
DrmForwardContentToDeviceObject(
IN ULONG ContentId,
IN PVOID Reserved,
IN PCDRMFORWARD DrmForward);
IN ULONG ContentId,
IN PVOID Reserved,
IN PCDRMFORWARD DrmForward);
NTSTATUS
NTAPI
DrmForwardContentToFileObject(
IN ULONG ContentId,
IN PFILE_OBJECT FileObject);
IN ULONG ContentId,
IN PFILE_OBJECT FileObject);
NTSTATUS
NTAPI
DrmForwardContentToInterface(
IN ULONG ContentId,
IN PUNKNOWN pUnknown,
IN ULONG NumMethods);
IN ULONG ContentId,
IN PUNKNOWN pUnknown,
IN ULONG NumMethods);
NTSTATUS
NTAPI
DrmGetContentRights(
IN ULONG ContentId,
OUT PDRMRIGHTS DrmRights);
IN ULONG ContentId,
OUT PDRMRIGHTS DrmRights);
#ifdef __cplusplus
}
#endif
DEFINE_GUID(IID_IDrmAudioStream,
0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e);
0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e);
#undef INTERFACE
#define INTERFACE IDrmAudioStream
DECLARE_INTERFACE_(IDrmAudioStream, IUnknown)
{
STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
REFIID InterfaceId,
PVOID* Interface
) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD_(NTSTATUS,SetContentId)(THIS_
IN ULONG ContentId,
IN PCDRMRIGHTS DrmRights) PURE;
DECLARE_INTERFACE_(IDrmAudioStream, IUnknown) {
STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
REFIID InterfaceId,
PVOID* Interface
) PURE;
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
STDMETHOD_(NTSTATUS,SetContentId)(THIS_
IN ULONG ContentId,
IN PCDRMRIGHTS DrmRights
) PURE;
};
typedef IDrmAudioStream *PDRMAUDIOSTREAM;
#define IMP_IDrmAudioStream \
STDMETHODIMP_(NTSTATUS) SetContentId \
( IN ULONG ContentId, \
IN PCDRMRIGHTS DrmRights \
);
#define IMP_IDrmAudioStream \
STDMETHODIMP_(NTSTATUS) SetContentId( \
IN ULONG ContentId, \
IN PCDRMRIGHTS DrmRights);
#endif
#endif /* DRMK_H */
+1 -1
View File
@@ -1,5 +1,5 @@
ULONG
DxApiGetVersion();
DxApiGetVersion(void);
ULONG
DxApi(
+100 -137
View File
@@ -22,15 +22,15 @@ typedef struct _ROOTHUB_PDO_EXTENSION {
#define USB_BUSIFFN __stdcall
#endif
#define CD_ERR_V1 0x00000001
#define CD_ERR_V1 0x00000001
#define ID_ERR_V1 0x00000001
#define ID_ERR_V1 0x00000001
#define USBD_KEEP_DEVICE_DATA 0x00000001
#define USBD_MARK_DEVICE_BUSY 0x00000002
#define USB_IDLE_NOT_READY 0
#define USB_IDLE_READY 1
#define USB_IDLE_NOT_READY 0
#define USB_IDLE_READY 1
typedef
NTSTATUS
@@ -41,7 +41,6 @@ USB_BUSIFFN_CREATE_USB_DEVICE (
IN PUSB_DEVICE_HANDLE HubDeviceHandle,
IN USHORT PortStatus,
IN USHORT PortNumber);
typedef USB_BUSIFFN_CREATE_USB_DEVICE *PUSB_BUSIFFN_CREATE_USB_DEVICE;
typedef enum _USBPORT_CREATEDEV_ERROR {
@@ -56,47 +55,45 @@ typedef enum _USBPORT_CREATEDEV_ERROR {
} USBPORT_CREATEDEV_ERROR;
typedef struct _USB_CD_ERROR_INFORMATION {
ULONG Version;
USBPORT_CREATEDEV_ERROR PathError;
ULONG UlongArg1;
ULONG UlongArg2;
NTSTATUS NtStatus;
UCHAR XtraInfo[64];
ULONG Version;
USBPORT_CREATEDEV_ERROR PathError;
ULONG UlongArg1;
ULONG UlongArg2;
NTSTATUS NtStatus;
UCHAR XtraInfo[64];
} USB_CD_ERROR_INFORMATION, *PUSB_CD_ERROR_INFORMATION;
typedef
NTSTATUS
USB_BUSIFFN
USB_BUSIFFN_CREATE_USB_DEVICE_EX (
IN PVOID BusContext,
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
IN USHORT PortStatus,
IN USHORT PortNumber,
OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo,
IN PVOID BusContext,
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
IN USHORT PortStatus,
IN USHORT PortNumber,
OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo,
IN USHORT TtPortNumber);
typedef USB_BUSIFFN_CREATE_USB_DEVICE_EX *PUSB_BUSIFFN_CREATE_USB_DEVICE_EX;
typedef struct _USB_PORT_PATH {
ULONG PortPathDepth;
ULONG PortPath[6];
ULONG PortPathDepth;
ULONG PortPath[6];
} USB_PORT_PATH, *PUSB_PORT_PATH;
typedef
NTSTATUS
USB_BUSIFFN
USB_BUSIFFN_CREATE_USB_DEVICE_V7 (
IN PVOID BusContext,
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
IN USHORT PortStatus,
IN PUSB_PORT_PATH PortPath,
OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo,
IN USHORT TtPortNumber,
IN PDEVICE_OBJECT PdoDeviceObject,
IN PUNICODE_STRING PhysicalDeviceObjectName);
IN PVOID BusContext,
OUT PUSB_DEVICE_HANDLE *NewDeviceHandle,
IN PUSB_DEVICE_HANDLE HsHubDeviceHandle,
IN USHORT PortStatus,
IN PUSB_PORT_PATH PortPath,
OUT PUSB_CD_ERROR_INFORMATION CdErrorInfo,
IN USHORT TtPortNumber,
IN PDEVICE_OBJECT PdoDeviceObject,
IN PUNICODE_STRING PhysicalDeviceObjectName);
typedef USB_BUSIFFN_CREATE_USB_DEVICE_V7 *PUSB_BUSIFFN_CREATE_USB_DEVICE_V7;
typedef enum _USBPORT_INITDEV_ERROR {
@@ -120,29 +117,26 @@ typedef
NTSTATUS
USB_BUSIFFN
USB_BUSIFFN_INITIALIZE_USB_DEVICE (
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE DeviceHandle);
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE DeviceHandle);
typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE;
typedef
NTSTATUS
USB_BUSIFFN
USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX (
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
OUT PUSB_ID_ERROR_INFORMATION IdErrInfo);
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
OUT PUSB_ID_ERROR_INFORMATION IdErrInfo);
typedef USB_BUSIFFN_INITIALIZE_USB_DEVICE_EX *PUSB_BUSIFFN_INITIALIZE_USB_DEVICE_EX;
typedef
NTSTATUS
USB_BUSIFFN
USB_BUSIFFN_REMOVE_USB_DEVICE (
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
IN ULONG Flags);
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE DeviceHandle,
IN ULONG Flags);
typedef USB_BUSIFFN_REMOVE_USB_DEVICE *PUSB_BUSIFFN_REMOVE_USB_DEVICE;
typedef
@@ -155,7 +149,6 @@ USB_BUSIFFN_GET_USB_DESCRIPTORS (
IN OUT PULONG DeviceDescriptorBufferLength,
OUT PUCHAR ConfigDescriptorBuffer,
IN OUT PULONG ConfigDescriptorBufferLength);
typedef USB_BUSIFFN_GET_USB_DESCRIPTORS *PUSB_BUSIFFN_GET_USB_DESCRIPTORS;
typedef
@@ -165,7 +158,6 @@ USB_BUSIFFN_RESTORE_DEVICE (
IN PVOID BusContext,
IN OUT PUSB_DEVICE_HANDLE OldDeviceHandle,
IN OUT PUSB_DEVICE_HANDLE NewDeviceHandle);
typedef USB_BUSIFFN_RESTORE_DEVICE *PUSB_BUSIFFN_RESTORE_DEVICE;
typedef
@@ -174,7 +166,6 @@ USB_BUSIFFN
USB_BUSIFFN_GET_POTRTHACK_FLAGS (
IN PVOID BusContext,
IN OUT PULONG Flags);
typedef USB_BUSIFFN_GET_POTRTHACK_FLAGS *PUSB_BUSIFFN_GET_POTRTHACK_FLAGS;
typedef
@@ -186,7 +177,6 @@ USB_BUSIFFN_GET_DEVICE_INFORMATION (
OUT PVOID DeviceInformationBuffer,
IN ULONG DeviceInformationBufferLength,
IN OUT PULONG LengthOfDataCopied);
typedef USB_BUSIFFN_GET_DEVICE_INFORMATION *PUSB_BUSIFFN_GET_DEVICE_INFORMATION;
typedef
@@ -197,7 +187,6 @@ USB_BUSIFFN_GET_CONTROLLER_INFORMATION (
IN OUT PVOID ControllerInformationBuffer,
IN ULONG ControllerInformationBufferLength,
IN OUT PULONG LengthOfDataCopied);
typedef USB_BUSIFFN_GET_CONTROLLER_INFORMATION *PUSB_BUSIFFN_GET_CONTROLLER_INFORMATION;
typedef
@@ -206,7 +195,6 @@ USB_BUSIFFN
USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND (
IN PVOID BusContext,
IN BOOLEAN Enable);
typedef USB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND *PUSB_BUSIFFN_CONTROLLER_SELECTIVE_SUSPEND;
typedef
@@ -218,7 +206,6 @@ USB_BUSIFFN_GET_EXTENDED_HUB_INFO (
IN PVOID HubInformationBuffer,
IN ULONG HubInformationBufferLength,
OUT PULONG LengthOfDataCopied);
typedef USB_BUSIFFN_GET_EXTENDED_HUB_INFO *PUSB_BUSIFFN_GET_EXTENDED_HUB_INFO;
typedef
@@ -229,7 +216,6 @@ USB_BUSIFFN_GET_ROOTHUB_SYM_NAME (
IN PVOID HubSymNameBuffer,
IN ULONG HubSymNameBufferLength,
OUT PULONG HubSymNameActualLength);
typedef USB_BUSIFFN_GET_ROOTHUB_SYM_NAME *PUSB_BUSIFFN_GET_ROOTHUB_SYM_NAME;
typedef
@@ -238,7 +224,6 @@ USB_BUSIFFN
USB_BUSIFFN_GET_DEVICE_BUSCONTEXT (
IN PVOID HubBusContext,
IN PVOID DeviceHandle);
typedef USB_BUSIFFN_GET_DEVICE_BUSCONTEXT *PUSB_BUSIFFN_GET_DEVICE_BUSCONTEXT;
typedef
@@ -248,7 +233,6 @@ USB_BUSIFFN_INITIALIZE_20HUB (
IN PVOID BusContext,
IN PUSB_DEVICE_HANDLE HubDeviceHandle,
IN ULONG TtCount);
typedef USB_BUSIFFN_INITIALIZE_20HUB *PUSB_BUSIFFN_INITIALIZE_20HUB;
typedef
@@ -257,7 +241,6 @@ USB_BUSIFFN
USB_BUSIFFN_IS_ROOT (
IN PVOID BusContext,
IN PVOID DeviceObject);
typedef USB_BUSIFFN_IS_ROOT *PUSB_BUSIFFN_IS_ROOT;
typedef
@@ -265,7 +248,6 @@ VOID
USB_BUSIFFN
USB_BUSIFFN_ACQUIRE_SEMAPHORE (
IN PVOID BusContext);
typedef USB_BUSIFFN_ACQUIRE_SEMAPHORE *PUSB_BUSIFFN_ACQUIRE_SEMAPHORE;
typedef
@@ -273,7 +255,6 @@ VOID
USB_BUSIFFN
USB_BUSIFFN_RELEASE_SEMAPHORE (
IN PVOID BusContext);
typedef USB_BUSIFFN_RELEASE_SEMAPHORE *PUSB_BUSIFFN_RELEASE_SEMAPHORE;
typedef
@@ -281,7 +262,6 @@ VOID
__stdcall
RH_INIT_CALLBACK (
IN PVOID CallBackContext);
typedef RH_INIT_CALLBACK *PRH_INIT_CALLBACK;
typedef
@@ -291,7 +271,6 @@ USB_BUSIFFN_ROOTHUB_INIT_NOTIFY (
IN PVOID BusContext,
IN PVOID CallbackContext,
IN PRH_INIT_CALLBACK CallbackRoutine);
typedef USB_BUSIFFN_ROOTHUB_INIT_NOTIFY *PUSB_BUSIFFN_ROOTHUB_INIT_NOTIFY;
typedef
@@ -300,7 +279,6 @@ USB_BUSIFFN
USB_BUSIFFN_FLUSH_TRANSFERS (
IN PVOID BusContext,
IN PVOID DeviceHandle);
typedef USB_BUSIFFN_FLUSH_TRANSFERS *PUSB_BUSIFFN_FLUSH_TRANSFERS;
typedef
@@ -310,7 +288,6 @@ USB_BUSIFFN_CALC_PIPE_BANDWIDTH (
IN PVOID BusContext,
IN PUSBD_PIPE_INFORMATION PipeInfo,
IN USB_DEVICE_SPEED DeviceSpeed);
typedef USB_BUSIFFN_CALC_PIPE_BANDWIDTH *PUSB_BUSIFFN_CALC_PIPE_BANDWIDTH;
typedef
@@ -319,7 +296,6 @@ USB_BUSIFFN
USB_BUSIFFN_SET_BUS_WAKE_MODE (
IN PVOID BusContext,
IN ULONG Mode);
typedef USB_BUSIFFN_SET_BUS_WAKE_MODE *PUSB_BUSIFFN_SET_BUS_WAKE_MODE;
typedef
@@ -330,7 +306,6 @@ USB_BUSIFFN_SET_DEVICE_FLAG (
IN GUID *DeviceFlagGuid,
IN PVOID ValueData,
IN ULONG ValueLength);
typedef USB_BUSIFFN_SET_DEVICE_FLAG *PUSB_BUSIFFN_SET_DEVICE_FLAG;
typedef
@@ -340,7 +315,6 @@ USB_BUSIFFN_SET_DEVHANDLE_DATA (
IN PVOID BusContext,
IN PVOID DeviceHandle,
IN PDEVICE_OBJECT UsbDevicePdo);
typedef USB_BUSIFFN_SET_DEVHANDLE_DATA *PUSB_BUSIFFN_SET_DEVHANDLE_DATA;
typedef
@@ -351,7 +325,6 @@ USB_BUSIFFN_TEST_POINT (
IN PVOID DeviceHandle,
IN ULONG Opcode,
IN PVOID TestData);
typedef USB_BUSIFFN_TEST_POINT *PUSB_BUSIFFN_TEST_POINT;
typedef
@@ -363,7 +336,6 @@ USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO (
OUT PVOID DeviceInformationBuffer,
IN ULONG DeviceInformationBufferLength,
IN OUT PULONG LengthOfDataCopied);
typedef USB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO *PUSB_BUSIFFN_GET_DEVICE_PERFORMANCE_INFO;
typedef
@@ -371,7 +343,6 @@ NTSTATUS
USB_BUSIFFN
USB_BUSIFFN_WAIT_ASYNC_POWERUP (
IN PVOID BusContext);
typedef USB_BUSIFFN_WAIT_ASYNC_POWERUP *PUSB_BUSIFFN_WAIT_ASYNC_POWERUP;
typedef
@@ -381,7 +352,6 @@ USB_BUSIFFN_GET_DEVICE_ADDRESS (
IN PVOID BusContext,
IN PUSB_DEVICE_HANDLE DeviceHandle,
OUT PUSHORT DeviceAddress);
typedef USB_BUSIFFN_GET_DEVICE_ADDRESS *PUSB_BUSIFFN_GET_DEVICE_ADDRESS;
typedef
@@ -392,7 +362,6 @@ USB_BUSIFFN_DEREF_DEVICE_HANDLE (
IN PUSB_DEVICE_HANDLE DeviceHandle,
IN PVOID Object,
IN ULONG Tag);
typedef USB_BUSIFFN_DEREF_DEVICE_HANDLE *PUSB_BUSIFFN_DEREF_DEVICE_HANDLE;
typedef
@@ -403,7 +372,6 @@ USB_BUSIFFN_REF_DEVICE_HANDLE (
IN PUSB_DEVICE_HANDLE DeviceHandle,
IN PVOID Object,
IN ULONG Tag);
typedef USB_BUSIFFN_REF_DEVICE_HANDLE *PUSB_BUSIFFN_REF_DEVICE_HANDLE;
typedef
@@ -413,7 +381,6 @@ USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE (
IN PVOID BusContext,
IN PUSB_DEVICE_HANDLE DeviceHandle,
IN ULONG NewIdleReadyState);
typedef USB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE *PUSB_BUSIFFN_SET_DEVICE_HANDLE_IDLE_READY_STATE;
typedef
@@ -423,7 +390,6 @@ USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT (
IN PVOID BusContext,
IN USHORT PortNumber,
OUT LPGUID ContainerId);
typedef USB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_GET_CONTAINER_ID_FOR_PORT;
typedef
@@ -433,7 +399,6 @@ USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT (
IN PVOID BusContext,
IN USHORT PortNumber,
IN LPGUID ContainerId);
typedef USB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT *PUSB_BUSIFFN_SET_CONTAINER_ID_FOR_PORT;
typedef
@@ -442,7 +407,6 @@ USB_BUSIFFN
USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES (
IN PVOID BusContext,
IN PUSB_DEVICE_HANDLE DeviceHandle);
typedef USB_BUSIFFN_ABORT_ALL_DEVICE_PIPES *PUSB_BUSIFFN_ABORT_ALL_DEVICE_PIPES;
#define ERRATA_FLAG_RESET_TT_ON_CANCEL 1
@@ -468,11 +432,10 @@ USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG (
IN PVOID BusContext,
IN PUSB_DEVICE_HANDLE DeviceHandle,
IN ULONG DeviceErrataFlag);
typedef USB_BUSIFFN_SET_DEVICE_ERRATA_FLAG *PUSB_BUSIFFN_SET_DEVICE_ERRATA_FLAG;
DEFINE_GUID(USB_BUS_INTERFACE_HUB_GUID,
0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
0xb2bb8c0a, 0x5ab4, 0x11d3, 0xa8, 0xcd, 0x0, 0xc0, 0x4f, 0x68, 0x74, 0x7a);
typedef struct _USB_BUS_INTERFACE_HUB_V0 {
USHORT Size;
@@ -667,7 +630,7 @@ typedef struct _USB_BUS_INTERFACE_HUB_V7 {
} USB_BUS_INTERFACE_HUB_V7, *PUSB_BUS_INTERFACE_HUB_V7;
DEFINE_GUID(USB_BUS_INTERFACE_HUB_MINIDUMP_GUID,
0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
0xc5485f21, 0x4e81, 0x4a23, 0xa8, 0xf9, 0xd8, 0x51, 0x8a, 0xf4, 0x5c, 0x38);
typedef VOID
(USB_BUSIFFN *PUSB_BUSIFFN_SET_MINIDUMP_FLAGS) (
@@ -683,7 +646,7 @@ typedef struct _USB_BUS_INTERFACE_HUB_MINIDUMP {
} USB_BUS_INTERFACE_HUB_MINIDUMP, *PUSB_BUS_INTERFACE_HUB_MINIDUMP;
DEFINE_GUID(USB_BUS_INTERFACE_HUB_SS_GUID,
0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
0xbfc3f363, 0x8ba1, 0x4c7b, 0x97, 0xba, 0x9b, 0x12, 0xb1, 0xca, 0x13, 0x2f);
typedef NTSTATUS
(USB_BUSIFFN *PUSB_BUSIFFN_SUSPEND_HUB) (
@@ -694,95 +657,95 @@ typedef NTSTATUS
PDEVICE_OBJECT Pdo);
typedef struct _USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND {
USHORT Size;
USHORT Version;
PVOID BusContext;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PUSB_BUSIFFN_SUSPEND_HUB SuspendHub;
PUSB_BUSIFFN_RESUME_HUB ResumeHub;
USHORT Size;
USHORT Version;
PVOID BusContext;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PUSB_BUSIFFN_SUSPEND_HUB SuspendHub;
PUSB_BUSIFFN_RESUME_HUB ResumeHub;
} USB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND, *PUSB_BUS_INTERFACE_HUB_SELECTIVE_SUSPEND;
#include <pshpack1.h>
typedef struct _USB_PIPE_INFORMATION_0 {
USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
UCHAR ED_Pad[1];
ULONG ScheduleOffset;
USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
UCHAR ED_Pad[1];
ULONG ScheduleOffset;
} USB_PIPE_INFORMATION_0, *PUSB_PIPE_INFORMATION_0;
typedef struct _USB_LEVEL_INFORMATION {
ULONG InformationLevel;
ULONG ActualLength;
ULONG InformationLevel;
ULONG ActualLength;
} USB_LEVEL_INFORMATION, *PUSB_LEVEL_INFORMATION;
typedef struct _USB_DEVICE_INFORMATION_0 {
ULONG InformationLevel;
ULONG ActualLength;
ULONG PortNumber;
USB_DEVICE_DESCRIPTOR DeviceDescriptor;
UCHAR DD_pad[2];
UCHAR CurrentConfigurationValue;
UCHAR ReservedMBZ;
USHORT DeviceAddress;
ULONG HubAddress;
USB_DEVICE_SPEED DeviceSpeed;
USB_DEVICE_TYPE DeviceType;
ULONG NumberOfOpenPipes;
USB_PIPE_INFORMATION_0 PipeList[1];
ULONG InformationLevel;
ULONG ActualLength;
ULONG PortNumber;
USB_DEVICE_DESCRIPTOR DeviceDescriptor;
UCHAR DD_pad[2];
UCHAR CurrentConfigurationValue;
UCHAR ReservedMBZ;
USHORT DeviceAddress;
ULONG HubAddress;
USB_DEVICE_SPEED DeviceSpeed;
USB_DEVICE_TYPE DeviceType;
ULONG NumberOfOpenPipes;
USB_PIPE_INFORMATION_0 PipeList[1];
} USB_DEVICE_INFORMATION_0, *PUSB_DEVICE_INFORMATION_0;
typedef struct _USB_CONTROLLER_INFORMATION_0 {
ULONG InformationLevel;
ULONG ActualLength;
BOOLEAN SelectiveSuspendEnabled;
BOOLEAN IsHighSpeedController;
ULONG InformationLevel;
ULONG ActualLength;
BOOLEAN SelectiveSuspendEnabled;
BOOLEAN IsHighSpeedController;
} USB_CONTROLLER_INFORMATION_0, *PUSB_CONTROLLER_INFORMATION_0;
typedef struct _USB_CONTROLLER_INFORMATION_1 {
ULONG InformationLevel;
ULONG ActualLength;
BOOLEAN SelectiveSuspendEnabled;
BOOLEAN IsHighSpeedController;
ULONG HcBusNumber;
ULONG HcBusDevice;
ULONG HcBusFunction;
ULONG InformationLevel;
ULONG ActualLength;
BOOLEAN SelectiveSuspendEnabled;
BOOLEAN IsHighSpeedController;
ULONG HcBusNumber;
ULONG HcBusDevice;
ULONG HcBusFunction;
} USB_CONTROLLER_INFORMATION_1, *PUSB_CONTROLLER_INFORMATION_1;
typedef struct _USB_EXTPORT_INFORMATION_0 {
ULONG PhysicalPortNumber;
ULONG PortLabelNumber;
USHORT VidOverride;
USHORT PidOverride;
ULONG PortAttributes;
ULONG PhysicalPortNumber;
ULONG PortLabelNumber;
USHORT VidOverride;
USHORT PidOverride;
ULONG PortAttributes;
} USB_EXTPORT_INFORMATION_0, *PUSB_EXTPORT_INFORMATION;
typedef struct _USB_EXTHUB_INFORMATION_0 {
ULONG InformationLevel;
ULONG NumberOfPorts;
USB_EXTPORT_INFORMATION_0 Port[255];
ULONG InformationLevel;
ULONG NumberOfPorts;
USB_EXTPORT_INFORMATION_0 Port[255];
} USB_EXTHUB_INFORMATION_0, *PUSB_EXTHUB_INFORMATION_0;
typedef struct _USB_DEVICE_PERFORMANCE_INFO_0 {
ULONG InformationLevel;
ULONG ActualLength;
ULONG BulkBytes;
ULONG BulkUrbCount;
ULONG ControlDataBytes;
ULONG ControlUrbCount;
ULONG IsoBytes;
ULONG IsoUrbCount;
ULONG InterruptBytes;
ULONG InterruptUrbCount;
ULONG AllocedInterrupt[6];
ULONG AllocedIso;
ULONG Total32secBandwidth;
ULONG TotalTtBandwidth;
ULONG TotalIsoLatency;
ULONG DroppedIsoPackets;
ULONG TransferErrors;
ULONG InformationLevel;
ULONG ActualLength;
ULONG BulkBytes;
ULONG BulkUrbCount;
ULONG ControlDataBytes;
ULONG ControlUrbCount;
ULONG IsoBytes;
ULONG IsoUrbCount;
ULONG InterruptBytes;
ULONG InterruptUrbCount;
ULONG AllocedInterrupt[6];
ULONG AllocedIso;
ULONG Total32secBandwidth;
ULONG TotalTtBandwidth;
ULONG TotalIsoLatency;
ULONG DroppedIsoPackets;
ULONG TransferErrors;
} USB_DEVICE_PERFORMANCE_INFO_0, *PUSB_DEVICE_PERFORMANCE_INFO_0;
#include <poppack.h>
#endif
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
-9
View File
@@ -23,15 +23,6 @@
#ifndef __IDE_H
#define __IDE_H
/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
#else
#define __GNU_EXTENSION
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
-173
View File
@@ -1,173 +0,0 @@
/*
* Copyright (C) 2007 CodeWeavers, Aric Stewart
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef _DDKIMM_H_
#define _DDKIMM_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _tagINPUTCONTEXT {
HWND hWnd;
BOOL fOpen;
POINT ptStatusWndPos;
POINT ptSoftKbdPos;
DWORD fdwConversion;
DWORD fdwSentence;
union {
LOGFONTA A;
LOGFONTW W;
} lfFont;
COMPOSITIONFORM cfCompForm;
CANDIDATEFORM cfCandForm[4];
HIMCC hCompStr;
HIMCC hCandInfo;
HIMCC hGuideLine;
HIMCC hPrivate;
DWORD dwNumMsgBuf;
HIMCC hMsgBuf;
DWORD fdwInit;
DWORD dwReserve[3];
} INPUTCONTEXT, *LPINPUTCONTEXT;
typedef struct _tagIMEINFO {
DWORD dwPrivateDataSize;
DWORD fdwProperty;
DWORD fdwConversionCaps;
DWORD fdwSentenceCaps;
DWORD fdwUICaps;
DWORD fdwSCSCaps;
DWORD fdwSelectCaps;
} IMEINFO, *LPIMEINFO;
typedef struct tagCOMPOSITIONSTRING {
DWORD dwSize;
DWORD dwCompReadAttrLen;
DWORD dwCompReadAttrOffset;
DWORD dwCompReadClauseLen;
DWORD dwCompReadClauseOffset;
DWORD dwCompReadStrLen;
DWORD dwCompReadStrOffset;
DWORD dwCompAttrLen;
DWORD dwCompAttrOffset;
DWORD dwCompClauseLen;
DWORD dwCompClauseOffset;
DWORD dwCompStrLen;
DWORD dwCompStrOffset;
DWORD dwCursorPos;
DWORD dwDeltaStart;
DWORD dwResultReadClauseLen;
DWORD dwResultReadClauseOffset;
DWORD dwResultReadStrLen;
DWORD dwResultReadStrOffset;
DWORD dwResultClauseLen;
DWORD dwResultClauseOffset;
DWORD dwResultStrLen;
DWORD dwResultStrOffset;
DWORD dwPrivateSize;
DWORD dwPrivateOffset;
} COMPOSITIONSTRING, *LPCOMPOSITIONSTRING;
typedef struct tagGUIDELINE {
DWORD dwSize;
DWORD dwLevel;
DWORD dwIndex;
DWORD dwStrLen;
DWORD dwStrOffset;
DWORD dwPrivateSize;
DWORD dwPrivateOffset;
} GUIDELINE, *LPGUIDELINE;
typedef struct tagCANDIDATEINFO {
DWORD dwSize;
DWORD dwCount;
DWORD dwOffset[32];
DWORD dwPrivateSize;
DWORD dwPrivateOffset;
} CANDIDATEINFO, *LPCANDIDATEINFO;
LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC);
BOOL WINAPI ImmUnlockIMC(HIMC);
DWORD WINAPI ImmGetIMCLockCount(HIMC);
HIMCC WINAPI ImmCreateIMCC(DWORD);
HIMCC WINAPI ImmDestroyIMCC(HIMCC);
LPVOID WINAPI ImmLockIMCC(HIMCC);
BOOL WINAPI ImmUnlockIMCC(HIMCC);
DWORD WINAPI ImmGetIMCCLockCount(HIMCC);
HIMCC WINAPI ImmReSizeIMCC(HIMCC, DWORD);
DWORD WINAPI ImmGetIMCCSize(HIMCC);
#define IMMGWL_IMC 0
#define IMMGWL_PRIVATE (sizeof(LONG))
/* IME Property bits */
#define IME_PROP_END_UNLOAD 0x0001
#define IME_PROP_KBD_CHAR_FIRST 0x0002
#define IME_PROP_IGNORE_UPKEYS 0x0004
#define IME_PROP_NEED_ALTKEY 0x0008
#define IME_PROP_NO_KEYS_ON_CLOSE 0x0010
/* for NI_CONTEXTUPDATED */
#define IMC_SETCONVERSIONMODE 0x0002
#define IMC_SETSENTENCEMODE 0x0004
#define IMC_SETOPENSTATUS 0x0006
/* dwAction for ImmNotifyIME */
#define NI_CONTEXTUPDATED 0x0003
#define NI_OPENCANDIDATE 0x0010
#define NI_CLOSECANDIDATE 0x0011
#define NI_SELECTCANDIDATESTR 0x0012
#define NI_CHANGECANDIDATELIST 0x0013
#define NI_FINALIZECONVERSIONRESULT 0x0014
#define NI_COMPOSITIONSTR 0x0015
#define NI_SETCANDIDATE_PAGESTART 0x0016
#define NI_SETCANDIDATE_PAGESIZE 0x0017
#define NI_IMEMENUSELECTED 0x0018
BOOL WINAPI ImmGenerateMessage(HIMC);
LRESULT WINAPI ImmRequestMessageA(HIMC, WPARAM, LPARAM);
LRESULT WINAPI ImmRequestMessageW(HIMC, WPARAM, LPARAM);
#define ImmRequestMessage WINELIB_NAME_AW(ImmRequestMessage);
BOOL WINAPI ImmTranslateMessage(HWND, UINT, WPARAM, LPARAM);
HWND WINAPI ImmCreateSoftKeyboard(UINT, UINT, int, int);
BOOL WINAPI ImmDestroySoftKeyboard(HWND);
BOOL WINAPI ImmShowSoftKeyboard(HWND, int);
BOOL WINAPI ImeInquire(LPIMEINFO, LPWSTR, LPCWSTR lpszOptions);
BOOL WINAPI ImeConfigure (HKL, HWND, DWORD, LPVOID);
DWORD WINAPI ImeConversionList(HIMC, LPCWSTR, LPCANDIDATELIST,DWORD,UINT);
BOOL WINAPI ImeDestroy(UINT);
LRESULT WINAPI ImeEscape(HIMC, UINT, LPVOID);
BOOL WINAPI ImeProcessKey(HIMC, UINT, LPARAM, CONST LPBYTE);
BOOL WINAPI ImeSelect(HIMC, BOOL);
BOOL WINAPI ImeSetActiveContext(HIMC, BOOL);
UINT WINAPI ImeToAsciiEx(UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC);
BOOL WINAPI NotifyIME(HIMC, DWORD, DWORD, DWORD);
BOOL WINAPI ImeRegisterWord(LPCWSTR, DWORD, LPCWSTR);
BOOL WINAPI ImeUnregisterWord(LPCWSTR, DWORD, LPCWSTR);
UINT WINAPI ImeGetRegisterWordStyle(UINT, LPSTYLEBUFW);
UINT WINAPI ImeEnumRegisterWord(REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
BOOL WINAPI ImeSetCompositionString(HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
DWORD WINAPI ImeGetImeMenuItems(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _DDKIMM_H_ */
+8 -3
View File
@@ -24,7 +24,7 @@ extern "C" {
#endif
#define H2I(p) PtrToUshort(p)
#ifndef NO_PORT_MACROS
#if defined(_X86_) || defined(_M_AMD64)
@@ -41,7 +41,7 @@ extern "C" {
#define WRITE_PORT_USHORT(p, v) __outword (H2I(p), (v))
#define WRITE_PORT_ULONG(p, v) __outdword (H2I(p), (v))
#define MEMORY_BARRIER()
#define MEMORY_BARRIER()
#elif defined(_PPC_) || defined(_MIPS_) || defined(_ARM_)
@@ -59,10 +59,15 @@ extern "C" {
#define WRITE_PORT_ULONG(p, v) WRITE_REGISTER_ULONG(p, (ULONG) (v))
#else
#error Unsupported architecture
#endif
#endif /* NO_PORT_MACROS */
#ifdef __cplusplus
}
#endif
#endif /* __IOACCESS_H */
-17
View File
@@ -1,17 +0,0 @@
#ifndef _ISGUIDS_H_
#define _ISGUIDS_H_
DEFINE_GUID(CLSID_InternetShortcut, 0xFBF23B40L, 0xE3F0, 0x101B, 0x84, 0x88, 0x00, 0xAA, 0x00, 0x3E, 0x56, 0xF8);
DEFINE_GUID(IID_IUniformResourceLocatorA, 0xFBF23B80L, 0xE3F0, 0x101B, 0x84, 0x88, 0x00, 0xAA, 0x00, 0x3E, 0x56, 0xF8);
DEFINE_GUID(IID_IUniformResourceLocatorW, 0xCABB0DA0L, 0xDA57, 0x11CF, 0x99, 0x74, 0x00, 0x20, 0xAF, 0xD7, 0x97, 0x62);
#ifdef UNICODE
#define IID_IUniformResourceLocator IID_IUniformResourceLocatorW
#else
#define IID_IUniformResourceLocator IID_IUniformResourceLocatorA
#endif
#endif
+41 -41
View File
@@ -32,9 +32,9 @@ extern "C" {
#endif
#if defined(_MCD_)
#define CHANGERAPI
#define CHANGERAPI
#else
#define CHANGERAPI DECLSPEC_IMPORT
#define CHANGERAPI DECLSPEC_IMPORT
#endif
#ifdef DebugPrint
@@ -47,41 +47,41 @@ extern "C" {
#define DebugPrint(x)
#endif
#define MAXIMUM_CHANGER_INQUIRY_DATA 252
#define MAXIMUM_CHANGER_INQUIRY_DATA 252
CHANGERAPI
PVOID
NTAPI
ChangerClassAllocatePool(
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes);
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes);
VOID
ChangerClassDebugPrint(
ULONG DebugPrintLevel,
PCCHAR DebugMessage,
ULONG DebugPrintLevel,
PCCHAR DebugMessage,
...);
CHANGERAPI
PVOID
NTAPI
ChangerClassFreePool(
IN PVOID PoolToFree);
IN PVOID PoolToFree);
CHANGERAPI
NTSTATUS
NTAPI
ChangerClassSendSrbSynchronous(
IN PDEVICE_OBJECT DeviceObject,
IN PSCSI_REQUEST_BLOCK Srb,
IN PVOID Buffer,
IN ULONG BufferSize,
IN BOOLEAN WriteToDevice);
IN PDEVICE_OBJECT DeviceObject,
IN PSCSI_REQUEST_BLOCK Srb,
IN PVOID Buffer,
IN ULONG BufferSize,
IN BOOLEAN WriteToDevice);
typedef NTSTATUS NTAPI
(*CHANGER_INITIALIZE)(
IN PDEVICE_OBJECT DeviceObject);
IN PDEVICE_OBJECT DeviceObject);
typedef ULONG NTAPI
(*CHANGER_EXTENSION_SIZE)(
@@ -89,47 +89,47 @@ typedef ULONG NTAPI
typedef VOID NTAPI
(*CHANGER_ERROR_ROUTINE)(
PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb,
NTSTATUS *Status,
BOOLEAN *Retry);
PDEVICE_OBJECT DeviceObject,
PSCSI_REQUEST_BLOCK Srb,
NTSTATUS *Status,
BOOLEAN *Retry);
typedef NTSTATUS NTAPI
(*CHANGER_COMMAND_ROUTINE)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
typedef NTSTATUS NTAPI
(*CHANGER_PERFORM_DIAGNOSTICS)(
IN PDEVICE_OBJECT DeviceObject,
OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError);
IN PDEVICE_OBJECT DeviceObject,
OUT PWMI_CHANGER_PROBLEM_DEVICE_ERROR ChangerDeviceError);
typedef struct _MCD_INIT_DATA {
ULONG InitDataSize;
CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize;
CHANGER_INITIALIZE ChangerInitialize;
CHANGER_ERROR_ROUTINE ChangerError;
CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics;
CHANGER_COMMAND_ROUTINE ChangerGetParameters;
CHANGER_COMMAND_ROUTINE ChangerGetStatus;
CHANGER_COMMAND_ROUTINE ChangerGetProductData;
CHANGER_COMMAND_ROUTINE ChangerSetAccess;
CHANGER_COMMAND_ROUTINE ChangerGetElementStatus;
CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus;
CHANGER_COMMAND_ROUTINE ChangerSetPosition;
CHANGER_COMMAND_ROUTINE ChangerExchangeMedium;
CHANGER_COMMAND_ROUTINE ChangerMoveMedium;
CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit;
CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags;
ULONG InitDataSize;
CHANGER_EXTENSION_SIZE ChangerAdditionalExtensionSize;
CHANGER_INITIALIZE ChangerInitialize;
CHANGER_ERROR_ROUTINE ChangerError;
CHANGER_PERFORM_DIAGNOSTICS ChangerPerformDiagnostics;
CHANGER_COMMAND_ROUTINE ChangerGetParameters;
CHANGER_COMMAND_ROUTINE ChangerGetStatus;
CHANGER_COMMAND_ROUTINE ChangerGetProductData;
CHANGER_COMMAND_ROUTINE ChangerSetAccess;
CHANGER_COMMAND_ROUTINE ChangerGetElementStatus;
CHANGER_COMMAND_ROUTINE ChangerInitializeElementStatus;
CHANGER_COMMAND_ROUTINE ChangerSetPosition;
CHANGER_COMMAND_ROUTINE ChangerExchangeMedium;
CHANGER_COMMAND_ROUTINE ChangerMoveMedium;
CHANGER_COMMAND_ROUTINE ChangerReinitializeUnit;
CHANGER_COMMAND_ROUTINE ChangerQueryVolumeTags;
} MCD_INIT_DATA, *PMCD_INIT_DATA;
CHANGERAPI
NTSTATUS
NTAPI
ChangerClassInitialize(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath,
IN PMCD_INIT_DATA MCDInitData);
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath,
IN PMCD_INIT_DATA MCDInitData);
#ifdef __cplusplus
}
+34 -30
View File
@@ -3,7 +3,7 @@
#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
typedef union _MCI_ADDR {
struct {
_ANONYMOUS_STRUCT struct {
ULONG Address;
ULONG Reserved;
} DUMMYSTRUCTNAME;
@@ -157,7 +157,7 @@ typedef enum _ERROR_SEVERITY_VALUE {
typedef union _ERROR_REVISION {
USHORT Revision;
struct {
_ANONYMOUS_STRUCT struct {
UCHAR Minor;
UCHAR Major;
} DUMMYSTRUCTNAME;
@@ -174,7 +174,7 @@ typedef union _ERROR_REVISION {
typedef union _ERROR_TIMESTAMP {
ULONGLONG TimeStamp;
struct {
_ANONYMOUS_STRUCT struct {
UCHAR Seconds;
UCHAR Minutes;
UCHAR Hours;
@@ -201,7 +201,7 @@ typedef _ERROR_PLATFORM_GUID ERROR_PLATFORM_GUID, *PERROR_PLATFORM_GUID;
typedef union _ERROR_RECORD_VALID {
UCHAR Valid;
struct {
_ANONYMOUS_STRUCT struct {
UCHAR OemPlatformID:1;
UCHAR Reserved:7;
} DUMMYSTRUCTNAME;
@@ -219,7 +219,7 @@ typedef struct _ERROR_RECORD_HEADER {
typedef union _ERROR_RECOVERY_INFO {
UCHAR RecoveryInfo;
struct {
_ANONYMOUS_STRUCT struct {
UCHAR Corrected:1;
UCHAR NotContained:1;
UCHAR Reset:1;
@@ -236,7 +236,7 @@ typedef struct _ERROR_SECTION_HEADER {
ULONG Length;
} ERROR_SECTION_HEADER, *PERROR_SECTION_HEADER;
#if !defined(__midl) && defined(_MSC_EXTENSIONS)
#if !defined(__midl)
__inline
USHORT
NTAPI
@@ -245,16 +245,20 @@ GetFwMceLogProcessorNumber(
{
PERROR_SECTION_HEADER section = (PERROR_SECTION_HEADER)((ULONG64)Log + sizeof(*Log));
USHORT lid = (USHORT)((UCHAR)(section->Reserved));
#ifdef NONAMELESSUNION
lid |= (USHORT)((UCHAR)(Log->TimeStamp.s.Reserved) << 8);
#else
lid |= (USHORT)((UCHAR)(Log->TimeStamp.Reserved) << 8);
#endif
return( lid );
}
#endif
#endif /* !__midl */
#define ERROR_PROCESSOR_GUID {0xe429faf1, 0x3cb7, 0x11d4, {0xbc, 0xa7, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81}}
typedef union _ERROR_MODINFO_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG CheckInfo:1;
ULONGLONG RequestorIdentifier:1;
ULONGLONG ResponderIdentifier:1;
@@ -291,7 +295,7 @@ typedef enum _ERROR_CACHE_CHECK_MESI {
typedef union _ERROR_CACHE_CHECK {
ULONGLONG CacheCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Operation:4;
ULONGLONG Level:2;
ULONGLONG Reserved1:2;
@@ -324,7 +328,7 @@ typedef union _ERROR_CACHE_CHECK {
typedef union _ERROR_CACHE_CHECK {
ULONGLONG CacheCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Operation:4;
ULONGLONG Level:2;
ULONGLONG Reserved1:2;
@@ -367,7 +371,7 @@ typedef enum _ERROR_TLB_CHECK_OPERATION {
typedef union _ERROR_TLB_CHECK {
ULONGLONG TlbCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG TRSlot:8;
ULONGLONG TRSlotValid:1;
ULONGLONG Reserved1:1;
@@ -407,7 +411,7 @@ typedef enum _ERROR_BUS_CHECK_OPERATION {
typedef union _ERROR_BUS_CHECK {
ULONGLONG BusCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Size:5;
ULONGLONG Internal:1;
ULONGLONG External:1;
@@ -434,7 +438,7 @@ typedef union _ERROR_BUS_CHECK {
typedef union _ERROR_BUS_CHECK {
ULONGLONG BusCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Size:5;
ULONGLONG Internal:1;
ULONGLONG External:1;
@@ -484,7 +488,7 @@ typedef enum _ERROR_REGFILE_CHECK_OPERATION {
typedef union _ERROR_REGFILE_CHECK {
ULONGLONG RegFileCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Identifier:4;
ULONGLONG Operation:4;
ULONGLONG RegisterNumber:7;
@@ -518,7 +522,7 @@ typedef enum _ERROR_MS_CHECK_OPERATION {
typedef union _ERROR_MS_CHECK {
ULONGLONG MsCheck;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG StructureIdentifier:5;
ULONGLONG Level:3;
ULONGLONG ArrayId:4;
@@ -561,7 +565,7 @@ typedef struct _ERROR_MODINFO {
typedef union _ERROR_PROCESSOR_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorMap:1;
ULONGLONG StateParameter:1;
ULONGLONG CRLid:1;
@@ -578,7 +582,7 @@ typedef union _ERROR_PROCESSOR_VALID {
typedef union _ERROR_PROCESSOR_ERROR_MAP {
ULONGLONG ErrorMap;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Cid:4;
ULONGLONG Tid:4;
ULONGLONG Eic:4;
@@ -597,7 +601,7 @@ typedef _ERROR_PROCESSOR_LEVEL_INDEX ERROR_PROCESSOR_LEVEL_INDEX, *PERROR_PROCES
typedef union _ERROR_PROCESSOR_STATE_PARAMETER {
ULONGLONG StateParameter;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG reserved0:2;
ULONGLONG rz:1;
ULONGLONG ra:1;
@@ -641,7 +645,7 @@ typedef union _ERROR_PROCESSOR_STATE_PARAMETER {
typedef union _PROCESSOR_LOCAL_ID {
ULONGLONG LocalId;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG reserved:16;
ULONGLONG eid:8;
ULONGLONG id:8;
@@ -664,7 +668,7 @@ typedef struct _ERROR_PROCESSOR_CPUID_INFO {
typedef union _ERROR_PROCESSOR_STATIC_INFO_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG MinState:1;
ULONGLONG BR:1;
ULONGLONG CR:1;
@@ -730,7 +734,7 @@ typedef enum _ERR_TYPES {
typedef union _ERROR_STATUS {
ULONGLONG Status;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG Reserved0:8;
ULONGLONG Type:8;
ULONGLONG Address:1;
@@ -750,7 +754,7 @@ typedef struct _ERROR_OEM_DATA {
typedef union _ERROR_BUS_SPECIFIC_DATA {
ULONGLONG BusSpecificData;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG LockAsserted:1;
ULONGLONG DeferLogged:1;
ULONGLONG IOQEmpty:1;
@@ -777,7 +781,7 @@ typedef union _ERROR_BUS_SPECIFIC_DATA {
typedef union _ERROR_MEMORY_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorStatus:1;
ULONGLONG PhysicalAddress:1;
ULONGLONG AddressMask:1;
@@ -825,7 +829,7 @@ typedef struct _ERROR_MEMORY {
typedef union _ERROR_PCI_BUS_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorStatus:1;
ULONGLONG ErrorType:1;
ULONGLONG Id:1;
@@ -881,7 +885,7 @@ typedef struct _ERROR_PCI_BUS {
typedef union _ERROR_PCI_COMPONENT_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorStatus:1;
ULONGLONG Info:1;
ULONGLONG MemoryMappedRegistersPairs:1;
@@ -919,7 +923,7 @@ typedef struct _ERROR_PCI_COMPONENT {
typedef union _ERROR_SYSTEM_EVENT_LOG_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG RecordId:1;
ULONGLONG RecordType:1;
ULONGLONG GeneratorId:1;
@@ -954,7 +958,7 @@ typedef struct _ERROR_SYSTEM_EVENT_LOG {
typedef union _ERROR_SMBIOS_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG EventType:1;
ULONGLONG Length:1;
ULONGLONG TimeStamp:1;
@@ -978,7 +982,7 @@ typedef struct _ERROR_SMBIOS {
typedef union _ERROR_PLATFORM_SPECIFIC_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorStatus:1;
ULONGLONG RequestorId:1;
ULONGLONG ResponderId:1;
@@ -1007,7 +1011,7 @@ typedef struct _ERROR_PLATFORM_SPECIFIC {
typedef union _ERROR_PLATFORM_BUS_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorStatus:1;
ULONGLONG RequestorId:1;
ULONGLONG ResponderId:1;
@@ -1036,7 +1040,7 @@ typedef struct _ERROR_PLATFORM_BUS {
typedef union _ERROR_PLATFORM_HOST_CONTROLLER_VALID {
ULONGLONG Valid;
struct {
_ANONYMOUS_STRUCT struct {
ULONGLONG ErrorStatus:1;
ULONGLONG RequestorId:1;
ULONGLONG ResponderId:1;
+153 -169
View File
@@ -31,213 +31,197 @@ extern "C" {
#define EMULATOR_WRITE_ACCESS 0x02
typedef enum _EMULATOR_PORT_ACCESS_TYPE {
Uchar,
Ushort,
Ulong
Uchar,
Ushort,
Ulong
} EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE;
typedef struct _EMULATOR_ACCESS_ENTRY {
ULONG BasePort;
ULONG NumConsecutivePorts;
EMULATOR_PORT_ACCESS_TYPE AccessType;
UCHAR AccessMode;
UCHAR StringSupport;
PVOID Routine;
ULONG BasePort;
ULONG NumConsecutivePorts;
EMULATOR_PORT_ACCESS_TYPE AccessType;
UCHAR AccessMode;
UCHAR StringSupport;
PVOID Routine;
} EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY;
typedef VOID
(NTAPI *PBANKED_SECTION_ROUTINE)(
IN ULONG ReadBank,
IN ULONG WriteBank,
IN PVOID Context);
IN ULONG ReadBank,
IN ULONG WriteBank,
IN PVOID Context);
#ifndef __BROKEN__
typedef enum _INTERFACE_TYPE {
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
PNPBus,
Vmcs,
MaximumInterfaceType
}INTERFACE_TYPE, *PINTERFACE_TYPE;
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
PNPBus,
Vmcs,
MaximumInterfaceType
} INTERFACE_TYPE, *PINTERFACE_TYPE;
typedef enum _KINTERRUPT_MODE {
LevelSensitive,
Latched
LevelSensitive,
Latched
} KINTERRUPT_MODE;
typedef VOID (*PINTERFACE_REFERENCE)(PVOID Context);
typedef VOID (*PINTERFACE_DEREFERENCE)(PVOID Context);
typedef enum _BUS_DATA_TYPE {
ConfigurationSpaceUndefined = -1,
Cmos,
EisaConfiguration,
Pos,
CbusConfiguration,
PCIConfiguration,
VMEConfiguration,
NuBusConfiguration,
PCMCIAConfiguration,
MPIConfiguration,
MPSAConfiguration,
PNPISAConfiguration,
SgiInternalConfiguration,
MaximumBusDataType
ConfigurationSpaceUndefined = -1,
Cmos,
EisaConfiguration,
Pos,
CbusConfiguration,
PCIConfiguration,
VMEConfiguration,
NuBusConfiguration,
PCMCIAConfiguration,
MPIConfiguration,
MPSAConfiguration,
PNPISAConfiguration,
SgiInternalConfiguration,
MaximumBusDataType
} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
typedef enum _DMA_WIDTH {
Width8Bits,
Width16Bits,
Width32Bits,
MaximumDmaWidth
}DMA_WIDTH, *PDMA_WIDTH;
Width8Bits,
Width16Bits,
Width32Bits,
MaximumDmaWidth
} DMA_WIDTH, *PDMA_WIDTH;
typedef enum _DMA_SPEED {
Compatible,
TypeA,
TypeB,
TypeC,
TypeF,
MaximumDmaSpeed
}DMA_SPEED, *PDMA_SPEED;
Compatible,
TypeA,
TypeB,
TypeC,
TypeF,
MaximumDmaSpeed
} DMA_SPEED, *PDMA_SPEED;
typedef struct _INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
} INTERFACE, *PINTERFACE;
typedef enum _IRQ_DEVICE_POLICY {
IrqPolicyMachineDefault = 0,
IrqPolicyAllCloseProcessors,
IrqPolicyOneCloseProcessor,
IrqPolicyAllProcessorsInMachine,
IrqPolicySpecifiedProcessors,
IrqPolicySpreadMessagesAcrossAllProcessors
IrqPolicyMachineDefault = 0,
IrqPolicyAllCloseProcessors,
IrqPolicyOneCloseProcessor,
IrqPolicyAllProcessorsInMachine,
IrqPolicySpecifiedProcessors,
IrqPolicySpreadMessagesAcrossAllProcessors
} IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
typedef enum _IRQ_PRIORITY {
IrqPriorityUndefined = 0,
IrqPriorityLow,
IrqPriorityNormal,
IrqPriorityHigh
IrqPriorityUndefined = 0,
IrqPriorityLow,
IrqPriorityNormal,
IrqPriorityHigh
} IRQ_PRIORITY, *PIRQ_PRIORITY;
typedef struct _IO_RESOURCE_DESCRIPTOR {
UCHAR Option;
UCHAR Type; // use CM_RESOURCE_TYPE
UCHAR ShareDisposition; // use CM_SHARE_DISPOSITION
UCHAR Spare1;
USHORT Flags; // use CM resource flag defines
USHORT Spare2; // align
union {
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Port;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory;
struct {
ULONG MinimumVector;
ULONG MaximumVector;
IRQ_DEVICE_POLICY AffinityPolicy;
IRQ_PRIORITY PriorityPolicy;
KAFFINITY TargetedProcessors;
} Interrupt;
struct {
ULONG MinimumChannel;
ULONG MaximumChannel;
} Dma;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Generic;
struct {
ULONG Data[3];
} DevicePrivate;
//
// Bus Number information.
//
struct {
ULONG Length;
ULONG MinBusNumber;
ULONG MaxBusNumber;
ULONG Reserved;
} BusNumber;
struct {
ULONG Priority; // use LCPRI_Xxx values in cfg.h
ULONG Reserved1;
ULONG Reserved2;
} ConfigData;
//
// The following structures provide descriptions
// for memory resource requirement greater than MAXULONG
//
struct {
ULONG Length40;
ULONG Alignment40;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory40;
struct {
ULONG Length48;
ULONG Alignment48;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory48;
struct {
ULONG Length64;
ULONG Alignment64;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory64;
} u;
UCHAR Option;
UCHAR Type; // use CM_RESOURCE_TYPE
UCHAR ShareDisposition; // use CM_SHARE_DISPOSITION
UCHAR Spare1;
USHORT Flags; // use CM resource flag defines
USHORT Spare2; // align
union {
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Port;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory;
struct {
ULONG MinimumVector;
ULONG MaximumVector;
IRQ_DEVICE_POLICY AffinityPolicy;
IRQ_PRIORITY PriorityPolicy;
KAFFINITY TargetedProcessors;
} Interrupt;
struct {
ULONG MinimumChannel;
ULONG MaximumChannel;
} Dma;
struct {
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Generic;
struct {
ULONG Data[3];
} DevicePrivate;
//
// Bus Number information.
//
struct {
ULONG Length;
ULONG MinBusNumber;
ULONG MaxBusNumber;
ULONG Reserved;
} BusNumber;
struct {
ULONG Priority; // use LCPRI_Xxx values in cfg.h
ULONG Reserved1;
ULONG Reserved2;
} ConfigData;
//
// The following structures provide descriptions
// for memory resource requirement greater than MAXULONG
//
struct {
ULONG Length40;
ULONG Alignment40;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory40;
struct {
ULONG Length48;
ULONG Alignment48;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory48;
struct {
ULONG Length64;
ULONG Alignment64;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory64;
} u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
#include <guiddef.h>
#endif
#endif /* ! __BROKEN__ */
#ifdef __cplusplus
}
+142 -148
View File
@@ -22,15 +22,6 @@
#ifndef __MINITAPE_H
#define __MINITAPE_H
/* Helper macro to enable gcc's extension. */
#ifndef __GNU_EXTENSION
#ifdef __GNUC__
#define __GNU_EXTENSION __extension__
#else
#define __GNU_EXTENSION
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
@@ -45,176 +36,179 @@ extern "C" {
#define MEDIA_CURRENTLY_MOUNTED 0x80000000
typedef enum _TAPE_STATUS {
TAPE_STATUS_SEND_SRB_AND_CALLBACK,
TAPE_STATUS_CALLBACK,
TAPE_STATUS_CHECK_TEST_UNIT_READY,
TAPE_STATUS_SUCCESS,
TAPE_STATUS_INSUFFICIENT_RESOURCES,
TAPE_STATUS_NOT_IMPLEMENTED,
TAPE_STATUS_INVALID_DEVICE_REQUEST,
TAPE_STATUS_INVALID_PARAMETER,
TAPE_STATUS_MEDIA_CHANGED,
TAPE_STATUS_BUS_RESET,
TAPE_STATUS_SETMARK_DETECTED,
TAPE_STATUS_FILEMARK_DETECTED,
TAPE_STATUS_BEGINNING_OF_MEDIA,
TAPE_STATUS_END_OF_MEDIA,
TAPE_STATUS_BUFFER_OVERFLOW,
TAPE_STATUS_NO_DATA_DETECTED,
TAPE_STATUS_EOM_OVERFLOW,
TAPE_STATUS_NO_MEDIA,
TAPE_STATUS_IO_DEVICE_ERROR,
TAPE_STATUS_UNRECOGNIZED_MEDIA,
TAPE_STATUS_DEVICE_NOT_READY,
TAPE_STATUS_MEDIA_WRITE_PROTECTED,
TAPE_STATUS_DEVICE_DATA_ERROR,
TAPE_STATUS_NO_SUCH_DEVICE,
TAPE_STATUS_INVALID_BLOCK_LENGTH,
TAPE_STATUS_IO_TIMEOUT,
TAPE_STATUS_DEVICE_NOT_CONNECTED,
TAPE_STATUS_DATA_OVERRUN,
TAPE_STATUS_DEVICE_BUSY,
TAPE_STATUS_REQUIRES_CLEANING,
TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
TAPE_STATUS_SEND_SRB_AND_CALLBACK,
TAPE_STATUS_CALLBACK,
TAPE_STATUS_CHECK_TEST_UNIT_READY,
TAPE_STATUS_SUCCESS,
TAPE_STATUS_INSUFFICIENT_RESOURCES,
TAPE_STATUS_NOT_IMPLEMENTED,
TAPE_STATUS_INVALID_DEVICE_REQUEST,
TAPE_STATUS_INVALID_PARAMETER,
TAPE_STATUS_MEDIA_CHANGED,
TAPE_STATUS_BUS_RESET,
TAPE_STATUS_SETMARK_DETECTED,
TAPE_STATUS_FILEMARK_DETECTED,
TAPE_STATUS_BEGINNING_OF_MEDIA,
TAPE_STATUS_END_OF_MEDIA,
TAPE_STATUS_BUFFER_OVERFLOW,
TAPE_STATUS_NO_DATA_DETECTED,
TAPE_STATUS_EOM_OVERFLOW,
TAPE_STATUS_NO_MEDIA,
TAPE_STATUS_IO_DEVICE_ERROR,
TAPE_STATUS_UNRECOGNIZED_MEDIA,
TAPE_STATUS_DEVICE_NOT_READY,
TAPE_STATUS_MEDIA_WRITE_PROTECTED,
TAPE_STATUS_DEVICE_DATA_ERROR,
TAPE_STATUS_NO_SUCH_DEVICE,
TAPE_STATUS_INVALID_BLOCK_LENGTH,
TAPE_STATUS_IO_TIMEOUT,
TAPE_STATUS_DEVICE_NOT_CONNECTED,
TAPE_STATUS_DATA_OVERRUN,
TAPE_STATUS_DEVICE_BUSY,
TAPE_STATUS_REQUIRES_CLEANING,
TAPE_STATUS_CLEANER_CARTRIDGE_INSTALLED
} TAPE_STATUS, *PTAPE_STATUS;
#define INQUIRYDATABUFFERSIZE 36
#ifndef _INQUIRYDATA_DEFINED /* also in scsi.h */
#define _INQUIRYDATA_DEFINED
typedef struct _INQUIRYDATA {
UCHAR DeviceType : 5;
UCHAR DeviceTypeQualifier : 3;
UCHAR DeviceTypeModifier : 7;
UCHAR RemovableMedia : 1;
__GNU_EXTENSION union {
UCHAR Versions;
__GNU_EXTENSION struct {
UCHAR ANSIVersion : 3;
UCHAR ECMAVersion : 3;
UCHAR ISOVersion : 2;
};
};
UCHAR ResponseDataFormat : 4;
UCHAR HiSupport : 1;
UCHAR NormACA : 1;
UCHAR TerminateTask : 1;
UCHAR AERC : 1;
UCHAR AdditionalLength;
UCHAR Reserved;
UCHAR Addr16 : 1;
UCHAR Addr32 : 1;
UCHAR AckReqQ: 1;
UCHAR MediumChanger : 1;
UCHAR MultiPort : 1;
UCHAR ReservedBit2 : 1;
UCHAR EnclosureServices : 1;
UCHAR ReservedBit3 : 1;
UCHAR SoftReset : 1;
UCHAR CommandQueue : 1;
UCHAR TransferDisable : 1;
UCHAR LinkedCommands : 1;
UCHAR Synchronous : 1;
UCHAR Wide16Bit : 1;
UCHAR Wide32Bit : 1;
UCHAR RelativeAddressing : 1;
UCHAR VendorId[8];
UCHAR ProductId[16];
UCHAR ProductRevisionLevel[4];
UCHAR VendorSpecific[20];
UCHAR Reserved3[40];
UCHAR DeviceType:5;
UCHAR DeviceTypeQualifier:3;
UCHAR DeviceTypeModifier:7;
UCHAR RemovableMedia:1;
__GNU_EXTENSION union {
UCHAR Versions;
__GNU_EXTENSION struct {
UCHAR ANSIVersion:3;
UCHAR ECMAVersion:3;
UCHAR ISOVersion:2;
};
};
UCHAR ResponseDataFormat:4;
UCHAR HiSupport:1;
UCHAR NormACA:1;
UCHAR TerminateTask:1;
UCHAR AERC:1;
UCHAR AdditionalLength;
UCHAR Reserved;
UCHAR Addr16:1;
UCHAR Addr32:1;
UCHAR AckReqQ:1;
UCHAR MediumChanger:1;
UCHAR MultiPort:1;
UCHAR ReservedBit2:1;
UCHAR EnclosureServices:1;
UCHAR ReservedBit3:1;
UCHAR SoftReset:1;
UCHAR CommandQueue:1;
UCHAR TransferDisable:1;
UCHAR LinkedCommands:1;
UCHAR Synchronous:1;
UCHAR Wide16Bit:1;
UCHAR Wide32Bit:1;
UCHAR RelativeAddressing:1;
UCHAR VendorId[8];
UCHAR ProductId[16];
UCHAR ProductRevisionLevel[4];
UCHAR VendorSpecific[20];
UCHAR Reserved3[40];
} INQUIRYDATA, *PINQUIRYDATA;
#endif
#endif /* _INQUIRYDATA_DEFINED */
typedef struct _MODE_CAPABILITIES_PAGE {
UCHAR PageCode : 6;
UCHAR Reserved1 : 2;
UCHAR PageLength;
UCHAR Reserved2[2];
UCHAR RO : 1;
UCHAR Reserved3 : 4;
UCHAR SPREV : 1;
UCHAR Reserved4 : 2;
UCHAR Reserved5 : 3;
UCHAR EFMT : 1;
UCHAR Reserved6 : 1;
UCHAR QFA : 1;
UCHAR Reserved7 : 2;
UCHAR LOCK : 1;
UCHAR LOCKED : 1;
UCHAR PREVENT : 1;
UCHAR UNLOAD : 1;
UCHAR Reserved8 : 2;
UCHAR ECC : 1;
UCHAR CMPRS : 1;
UCHAR Reserved9 : 1;
UCHAR BLK512 : 1;
UCHAR BLK1024 : 1;
UCHAR Reserved10 : 4;
UCHAR SLOWB : 1;
UCHAR MaximumSpeedSupported[2];
UCHAR MaximumStoredDefectedListEntries[2];
UCHAR ContinuousTransferLimit[2];
UCHAR CurrentSpeedSelected[2];
UCHAR BufferSize[2];
UCHAR Reserved11[2];
UCHAR PageCode:6;
UCHAR Reserved1:2;
UCHAR PageLength;
UCHAR Reserved2[2];
UCHAR RO:1;
UCHAR Reserved3:4;
UCHAR SPREV:1;
UCHAR Reserved4:2;
UCHAR Reserved5:3;
UCHAR EFMT:1;
UCHAR Reserved6:1;
UCHAR QFA:1;
UCHAR Reserved7:2;
UCHAR LOCK:1;
UCHAR LOCKED:1;
UCHAR PREVENT:1;
UCHAR UNLOAD:1;
UCHAR Reserved8:2;
UCHAR ECC:1;
UCHAR CMPRS:1;
UCHAR Reserved9:1;
UCHAR BLK512:1;
UCHAR BLK1024:1;
UCHAR Reserved10:4;
UCHAR SLOWB:1;
UCHAR MaximumSpeedSupported[2];
UCHAR MaximumStoredDefectedListEntries[2];
UCHAR ContinuousTransferLimit[2];
UCHAR CurrentSpeedSelected[2];
UCHAR BufferSize[2];
UCHAR Reserved11[2];
} MODE_CAPABILITIES_PAGE, *PMODE_CAPABILITIES_PAGE;
typedef BOOLEAN NTAPI
(*TAPE_VERIFY_INQUIRY_ROUTINE)(
IN PINQUIRYDATA InquiryData,
IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
IN PINQUIRYDATA InquiryData,
IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
typedef VOID NTAPI
(*TAPE_EXTENSION_INIT_ROUTINE)(
IN PVOID MinitapeExtension,
IN PINQUIRYDATA InquiryData,
IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
IN PVOID MinitapeExtension,
IN PINQUIRYDATA InquiryData,
IN PMODE_CAPABILITIES_PAGE ModeCapabilitiesPage);
typedef VOID NTAPI
(*TAPE_ERROR_ROUTINE)(
IN PVOID MinitapeExtension,
IN PSCSI_REQUEST_BLOCK Srb,
IN OUT PTAPE_STATUS TapeStatus);
IN PVOID MinitapeExtension,
IN PSCSI_REQUEST_BLOCK Srb,
IN OUT PTAPE_STATUS TapeStatus);
typedef TAPE_STATUS NTAPI
(*TAPE_PROCESS_COMMAND_ROUTINE)(
IN OUT PVOID MinitapeExtension,
IN OUT PVOID CommandExtension,
IN OUT PVOID CommandParameters,
IN OUT PSCSI_REQUEST_BLOCK Srb,
IN ULONG CallNumber,
IN TAPE_STATUS StatusOfLastCommand,
IN OUT PULONG RetryFlags);
IN OUT PVOID MinitapeExtension,
IN OUT PVOID CommandExtension,
IN OUT PVOID CommandParameters,
IN OUT PSCSI_REQUEST_BLOCK Srb,
IN ULONG CallNumber,
IN TAPE_STATUS StatusOfLastCommand,
IN OUT PULONG RetryFlags);
#define TAPE_RETRY_MASK 0x0000FFFF
#define IGNORE_ERRORS 0x00010000
#define RETURN_ERRORS 0x00020000
typedef struct _TAPE_INIT_DATA {
TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry;
BOOLEAN QueryModeCapabilitiesPage;
ULONG MinitapeExtensionSize;
TAPE_EXTENSION_INIT_ROUTINE ExtensionInit;
ULONG DefaultTimeOutValue;
TAPE_ERROR_ROUTINE TapeError;
ULONG CommandExtensionSize;
TAPE_PROCESS_COMMAND_ROUTINE CreatePartition;
TAPE_PROCESS_COMMAND_ROUTINE Erase;
TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters;
TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters;
TAPE_PROCESS_COMMAND_ROUTINE GetPosition;
TAPE_PROCESS_COMMAND_ROUTINE GetStatus;
TAPE_PROCESS_COMMAND_ROUTINE Prepare;
TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters;
TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters;
TAPE_PROCESS_COMMAND_ROUTINE SetPosition;
TAPE_PROCESS_COMMAND_ROUTINE WriteMarks;
TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */
TAPE_VERIFY_INQUIRY_ROUTINE VerifyInquiry;
BOOLEAN QueryModeCapabilitiesPage;
ULONG MinitapeExtensionSize;
TAPE_EXTENSION_INIT_ROUTINE ExtensionInit;
ULONG DefaultTimeOutValue;
TAPE_ERROR_ROUTINE TapeError;
ULONG CommandExtensionSize;
TAPE_PROCESS_COMMAND_ROUTINE CreatePartition;
TAPE_PROCESS_COMMAND_ROUTINE Erase;
TAPE_PROCESS_COMMAND_ROUTINE GetDriveParameters;
TAPE_PROCESS_COMMAND_ROUTINE GetMediaParameters;
TAPE_PROCESS_COMMAND_ROUTINE GetPosition;
TAPE_PROCESS_COMMAND_ROUTINE GetStatus;
TAPE_PROCESS_COMMAND_ROUTINE Prepare;
TAPE_PROCESS_COMMAND_ROUTINE SetDriveParameters;
TAPE_PROCESS_COMMAND_ROUTINE SetMediaParameters;
TAPE_PROCESS_COMMAND_ROUTINE SetPosition;
TAPE_PROCESS_COMMAND_ROUTINE WriteMarks;
TAPE_PROCESS_COMMAND_ROUTINE PreProcessReadWrite; /* optional */
} TAPE_INIT_DATA, *PTAPE_INIT_DATA;
typedef struct _TAPE_PHYS_POSITION {
ULONG SeekBlockAddress;
ULONG SpaceBlockCount;
ULONG SeekBlockAddress;
ULONG SpaceBlockCount;
} TAPE_PHYS_POSITION, PTAPE_PHYS_POSITION;
#pragma pack(pop)
+30 -25
View File
@@ -15,13 +15,12 @@ DEFINE_GUID(MOUNTDEV_MOUNTED_DEVICE_GUID, 0x53F5630D, 0xB6BF, 0x11D0, 0x94, 0xF2
#define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 32, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE CTL_CODE(MOUNTMGRCONTROLTYPE, 33, METHOD_BUFFERED, FILE_READ_ACCESS)
struct mountmgr_unix_drive
{
ULONG size;
ULONG type;
WCHAR letter;
USHORT mount_point_offset;
USHORT device_offset;
struct mountmgr_unix_drive {
ULONG size;
ULONG type;
WCHAR letter;
USHORT mount_point_offset;
USHORT device_offset;
};
#define IOCTL_MOUNTMGR_CREATE_POINT \
@@ -51,20 +50,22 @@ struct mountmgr_unix_drive
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME \
CTL_CODE(MOUNTDEVCONTROLTYPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define MOUNTMGR_IS_DRIVE_LETTER(s) ((s)->Length == 28 && (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && \
(s)->Buffer[2] == 'o' && (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && \
(s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && \
(s)->Buffer[8] == 'c' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && \
(s)->Buffer[11] == '\\' && (s)->Buffer[12] >= 'A' && \
(s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':')
#define MOUNTMGR_IS_DRIVE_LETTER(s) \
((s)->Length == 28 && (s)->Buffer[0] == '\\' && (s)->Buffer[1] == 'D' && \
(s)->Buffer[2] == 'o' && (s)->Buffer[3] == 's' && (s)->Buffer[4] == 'D' && \
(s)->Buffer[5] == 'e' && \ (s)->Buffer[6] == 'v' && (s)->Buffer[7] == 'i' && \
(s)->Buffer[8] == 'c' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == 's' && \
(s)->Buffer[11] == '\\' && (s)->Buffer[12] >= 'A' && \
(s)->Buffer[12] <= 'Z' && (s)->Buffer[13] == ':')
#define MOUNTMGR_IS_VOLUME_NAME(s) (((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \
(s)->Buffer[0] == '\\'&& ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \
(s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \
(s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \
(s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \
(s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \
(s)->Buffer[34] == '-' && (s)->Buffer[47] == '}')
#define MOUNTMGR_IS_VOLUME_NAME(s) \
(((s)->Length == 96 || ((s)->Length == 98 && (s)->Buffer[48] == '\\')) && \
(s)->Buffer[0] == '\\'&& ((s)->Buffer[1] == '?' || (s)->Buffer[1] == '\\') && \
(s)->Buffer[2] == '?' && (s)->Buffer[3] == '\\' && (s)->Buffer[4] == 'V' && \
(s)->Buffer[5] == 'o' && (s)->Buffer[6] == 'l' && (s)->Buffer[7] == 'u' && \
(s)->Buffer[8] == 'm' && (s)->Buffer[9] == 'e' && (s)->Buffer[10] == '{' && \
(s)->Buffer[19] == '-' && (s)->Buffer[24] == '-' && (s)->Buffer[29] == '-' && \
(s)->Buffer[34] == '-' && (s)->Buffer[47] == '}')
typedef struct _MOUNTMGR_CREATE_POINT_INPUT {
USHORT SymbolicLinkNameOffset;
@@ -128,10 +129,14 @@ typedef struct _MOUNTDEV_NAME {
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS \
CTL_CODE(MOUNTMGRCONTROLTYPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define MOUNTMGR_IS_DOS_VOLUME_NAME(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '\\')
#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '\\')
#define MOUNTMGR_IS_NT_VOLUME_NAME(s) ( MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '?')
#define MOUNTMGR_IS_NT_VOLUME_NAME_WB(s) (MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '?')
#define MOUNTMGR_IS_DOS_VOLUME_NAME(s) \
(MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '\\')
#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s) \
(MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '\\')
#define MOUNTMGR_IS_NT_VOLUME_NAME(s) \
( MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 96 && (s)->Buffer[1] == '?')
#define MOUNTMGR_IS_NT_VOLUME_NAME_WB(s) \
(MOUNTMGR_IS_VOLUME_NAME(s) && (s)->Length == 98 && (s)->Buffer[1] == '?')
typedef struct _MOUNTMGR_VOLUME_PATHS {
ULONG MultiSzLength;
@@ -171,7 +176,7 @@ typedef struct _MOUNTMGR_SET_AUTO_MOUNT {
#define IOCTL_MOUNTMGR_TRACELOG_CACHE \
CTL_CODE(MOUNTMGRCONTROLTYPE, 18, METHOD_BUFFERED, FILE_READ_ACCESS)
#endif
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
#endif /* _MOUNTMGR_ */

Some files were not shown because too many files have changed in this diff Show More