Sync with trunk head (r48826)

svn path=/branches/cmake-bringup/; revision=48831
This commit is contained in:
Timo Kreuzer 2010-09-20 17:27:52 +00:00
commit 912ce51ae6
1261 changed files with 77960 additions and 24007 deletions

View file

@ -359,6 +359,7 @@ CLEANUP:
VOID ShowInfo(BOOL bAll)
{
MIB_IFROW mibEntry;
PIP_ADAPTER_INFO pAdapterInfo = NULL;
PIP_ADAPTER_INFO pAdapter = NULL;
ULONG adaptOutBufLen = 0;
@ -441,6 +442,9 @@ VOID ShowInfo(BOOL bAll)
{
LPTSTR IntType, myConType;
mibEntry.dwIndex = pAdapter->Index;
GetIfEntry(&mibEntry);
IntType = GetInterfaceTypeName(pAdapter->Type);
myConType = GetConnectionType(pAdapter->AdapterName);
@ -449,7 +453,7 @@ VOID ShowInfo(BOOL bAll)
if (myConType != NULL) HeapFree(ProcessHeap, 0, myConType);
/* check if the adapter is connected to the media */
if (_tcscmp(pAdapter->IpAddressList.IpAddress.String, "0.0.0.0") == 0)
if (mibEntry.dwOperStatus != MIB_IF_OPER_STATUS_CONNECTED && mibEntry.dwOperStatus != MIB_IF_OPER_STATUS_OPERATIONAL)
{
_tprintf(_T("\tMedia State . . . . . . . . . . . : Media disconnected\n"));
pAdapter = pAdapter->Next;

View file

@ -237,12 +237,13 @@ BOOL DisplayOutput()
ShowUdpStatistics();
return EXIT_SUCCESS;
}
else //if (bDoShowAllCons)
else
{
_tprintf(_T("\nActive Connections\n"));
_tprintf(_T("\n Proto Local Address Foreign Address State\n"));
ShowTcpTable();
ShowUdpTable();
if (bDoShowAllCons)
ShowUdpTable();
}
return EXIT_SUCCESS;
}
@ -422,23 +423,24 @@ VOID ShowTcpTable()
CHAR Remote[ADDRESSLEN];
/* Get the table of TCP endpoints */
dwSize = 0;
error = GetTcpTable(NULL, &dwSize, TRUE);
if (error != ERROR_INSUFFICIENT_BUFFER)
dwSize = sizeof (MIB_TCPTABLE);
/* Should also work when we get new connections between 2 GetTcpTable()
* calls: */
do
{
tcpTable = (PMIB_TCPTABLE) HeapAlloc(GetProcessHeap(), 0, dwSize);
error = GetTcpTable(tcpTable, &dwSize, TRUE);
if ( error != NO_ERROR )
HeapFree(GetProcessHeap(), 0, tcpTable);
}
while ( error == ERROR_INSUFFICIENT_BUFFER );
if (error != NO_ERROR)
{
printf("Failed to snapshot TCP endpoints.\n");
DoFormatMessage(error);
exit(EXIT_FAILURE);
}
tcpTable = (PMIB_TCPTABLE) HeapAlloc(GetProcessHeap(), 0, dwSize);
error = GetTcpTable(tcpTable, &dwSize, TRUE );
if (error)
{
printf("Failed to snapshot TCP endpoints table.\n");
DoFormatMessage(error);
HeapFree(GetProcessHeap(), 0, tcpTable);
exit(EXIT_FAILURE);
}
/* Dump the TCP table */
for (i = 0; i < tcpTable->dwNumEntries; i++)

View file

@ -587,8 +587,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
}
else
pt.x = pt.y = 0;
ClientToScreen(pChildWnd->hListWnd, &pt);
}
ClientToScreen(pChildWnd->hListWnd, &pt);
if(i == -1)
{
TrackPopupMenu(GetSubMenu(hPopupMenus, PM_NEW), TPM_RIGHTBUTTON, pt.x, pt.y, 0, hFrameWnd, NULL);

View file

@ -47,9 +47,11 @@ typedef struct
INT SelStart;
INT SelEnd;
BOOL SelOnField;
} HEXEDIT_DATA, *PHEXEDIT_DATA;
static const TCHAR ClipboardFormatName[] = TEXT("RegEdit_HexData");
static UINT ClipboardFormatID = 0;
/* hit test codes */
#define HEHT_LEFTMARGIN (0x1)
#define HEHT_ADDRESS (0x2)
@ -67,6 +69,8 @@ RegisterHexEditorClass(HINSTANCE hInstance)
{
WNDCLASSEX WndClass;
ClipboardFormatID = RegisterClipboardFormat(ClipboardFormatName);
ZeroMemory(&WndClass, sizeof(WNDCLASSEX));
WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = CS_DBLCLKS;
@ -218,7 +222,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
if(ScrollPos + First == 0)
{
/* draw address */
_stprintf(addr, _T("%04X"), 0);
wsprintf(addr, TEXT("%04X"), 0);
TextOut(hDC, hed->LeftMargin, First * hed->LineHeight, addr, 4);
}
}
@ -240,7 +244,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
dx = hed->LeftMargin;
/* draw address */
_stprintf(addr, _T("%04lX"), linestart);
wsprintf(addr, TEXT("%04lX"), linestart);
TextOut(hDC, dx, dy, addr, 4);
dx += ((4 + hed->AddressSpacing) * hed->CharWidth);
@ -260,7 +264,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
rct.left += dh;
rct.right += dh;
_stprintf(hex, _T("%02X"), *(current++));
wsprintf(hex, TEXT("%02X"), *(current++));
if (i0 <= i && i < i1)
{
rct2.left = dx;
@ -275,7 +279,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
}
else
ExtTextOut(hDC, dx, dy, ETO_OPAQUE, &rct, hex, 2, NULL);
dx += dh;
dx += dh;
i++;
}
@ -285,8 +289,8 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
i = isave;
for(x = 0; x < hed->ColumnsPerLine && current < end; x++)
{
_stprintf(hex, _T("%C"), *(current++));
hex[0] = ((hex[0] & _T('\x007f')) >= _T(' ') ? hex[0] : _T('.'));
wsprintf(hex, _T("%C"), *(current++));
hex[0] = ((hex[0] & _T('\x007f')) >= _T(' ') ? hex[0] : _T('.'));
if (i0 <= i && i < i1)
{
rct2.left = dx;
@ -300,7 +304,7 @@ HEXEDIT_PaintLines(PHEXEDIT_DATA hed, HDC hDC, DWORD ScrollPos, DWORD First, DWO
}
else
TextOut(hDC, dx, dy, hex, 1);
dx += hed->CharWidth;
dx += hed->CharWidth;
i++;
}
@ -415,6 +419,149 @@ HEXEDIT_IndexFromPoint(PHEXEDIT_DATA hed, POINTS pt, DWORD Hit, POINT *EditPos,
return Index;
}
static VOID
HEXEDIT_Copy(PHEXEDIT_DATA hed)
{
PBYTE pb, buf;
UINT cb;
INT i0, i1;
HGLOBAL hGlobal;
if (hed->SelStart < hed->SelEnd)
{
i0 = hed->SelStart;
i1 = hed->SelEnd;
}
else
{
i0 = hed->SelEnd;
i1 = hed->SelStart;
}
cb = i1 - i0;
if (cb == 0)
return;
hGlobal = GlobalAlloc(GHND | GMEM_SHARE, cb + sizeof(DWORD));
if (hGlobal == NULL)
return;
pb = GlobalLock(hGlobal);
if (pb)
{
*(PDWORD)pb = cb;
pb += sizeof(DWORD);
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
CopyMemory(pb, buf + i0, cb);
LocalUnlock(hed->hBuffer);
}
GlobalUnlock(hGlobal);
if (OpenClipboard(hed->hWndSelf))
{
EmptyClipboard();
SetClipboardData(ClipboardFormatID, hGlobal);
CloseClipboard();
}
}
else
GlobalFree(hGlobal);
}
static VOID
HEXEDIT_Delete(PHEXEDIT_DATA hed)
{
PBYTE buf;
INT i0, i1;
UINT bufsize;
if (hed->SelStart < hed->SelEnd)
{
i0 = hed->SelStart;
i1 = hed->SelEnd;
}
else
{
i0 = hed->SelEnd;
i1 = hed->SelStart;
}
if (i0 != i1)
{
bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0);
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + i0, buf + i1, bufsize - i1);
LocalUnlock(hed->hBuffer);
}
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - (i1 - i0));
hed->InMid = FALSE;
hed->Index = hed->SelStart = hed->SelEnd = i0;
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
}
}
static VOID
HEXEDIT_Paste(PHEXEDIT_DATA hed)
{
HGLOBAL hGlobal;
UINT bufsize;
PBYTE pb, buf;
DWORD cb;
HEXEDIT_Delete(hed);
bufsize = (hed->hBuffer ? LocalSize(hed->hBuffer) : 0);
if (OpenClipboard(hed->hWndSelf))
{
hGlobal = GetClipboardData(ClipboardFormatID);
if (hGlobal != NULL)
{
pb = (PBYTE) GlobalLock(hGlobal);
cb = *(PDWORD) pb;
pb += sizeof(DWORD);
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize + cb);
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
{
MoveMemory(buf + hed->Index + cb, buf + hed->Index,
bufsize - hed->Index);
CopyMemory(buf + hed->Index, pb, cb);
LocalUnlock(hed->hBuffer);
}
GlobalUnlock(hGlobal);
}
CloseClipboard();
}
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
}
static VOID
HEXEDIT_Cut(PHEXEDIT_DATA hed)
{
HEXEDIT_Copy(hed);
HEXEDIT_Delete(hed);
}
static VOID
HEXEDIT_SelectAll(PHEXEDIT_DATA hed)
{
INT bufsize;
bufsize = (hed->hBuffer ? (INT) LocalSize(hed->hBuffer) : 0);
hed->Index = hed->SelStart = 0;
hed->SelEnd = bufsize;
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
}
/*** Control specific messages ************************************************/
static LRESULT
@ -808,19 +955,18 @@ HEXEDIT_WM_LBUTTONDOWN(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
if (GetAsyncKeyState(VK_SHIFT) < 0)
{
if (hed->SelOnField)
if (hed->EditingField)
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
else
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
hed->SelEnd = hed->Index;
hed->EditingField = hed->SelOnField;
}
else
{
Hit = HEXEDIT_HitRegionTest(hed, Pt);
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, Hit, &EditPos, &NewField);
hed->SelStart = hed->SelEnd = hed->Index;
hed->SelOnField = hed->EditingField = NewField;
hed->EditingField = NewField;
SetCapture(hed->hWndSelf);
}
hed->CaretCol = EditPos.x;
@ -839,7 +985,7 @@ HEXEDIT_WM_LBUTTONUP(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
POINT EditPos;
if (GetCapture() == hed->hWndSelf)
{
if (hed->SelOnField)
if (hed->EditingField)
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
else
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
@ -860,7 +1006,7 @@ HEXEDIT_WM_MOUSEMOVE(PHEXEDIT_DATA hed, INT Buttons, POINTS Pt)
POINT EditPos;
if (GetCapture() == hed->hWndSelf)
{
if (hed->SelOnField)
if (hed->EditingField)
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_HEXDUMP, &EditPos, &NewField);
else
hed->Index = HEXEDIT_IndexFromPoint(hed, Pt, HEHT_ASCIIDUMP, &EditPos, &NewField);
@ -900,8 +1046,51 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
switch(VkCode)
{
case VK_DELETE:
case 'X':
if (GetAsyncKeyState(VK_SHIFT) >= 0 &&
GetAsyncKeyState(VK_CONTROL) < 0 && hed->SelStart != hed->SelEnd)
HEXEDIT_Cut(hed);
else
return TRUE;
break;
case 'C':
if (GetAsyncKeyState(VK_SHIFT) >= 0 &&
GetAsyncKeyState(VK_CONTROL) < 0 && hed->SelStart != hed->SelEnd)
HEXEDIT_Copy(hed);
else
return TRUE;
break;
case 'V':
if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0)
HEXEDIT_Paste(hed);
else
return TRUE;
break;
case 'A':
if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0)
HEXEDIT_SelectAll(hed);
else
return TRUE;
break;
case VK_INSERT:
if (hed->SelStart != hed->SelEnd)
{
if (GetAsyncKeyState(VK_SHIFT) >= 0 && GetAsyncKeyState(VK_CONTROL) < 0)
HEXEDIT_Copy(hed);
}
if (GetAsyncKeyState(VK_SHIFT) < 0 && GetAsyncKeyState(VK_CONTROL) >= 0)
HEXEDIT_Paste(hed);
break;
case VK_DELETE:
if (GetAsyncKeyState(VK_SHIFT) < 0 && GetAsyncKeyState(VK_CONTROL) >= 0 &&
hed->SelStart != hed->SelEnd)
HEXEDIT_Copy(hed);
if (i0 != i1)
{
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
@ -946,7 +1135,7 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
break;
case VK_BACK:
if (hed->SelStart != hed->SelEnd)
if (i0 != i1)
{
buf = (PBYTE) LocalLock(hed->hBuffer);
if (buf)
@ -986,6 +1175,8 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
hed->CaretCol = hed->Index % hed->ColumnsPerLine;
hed->CaretLine = hed->Index / hed->ColumnsPerLine;
}
else
return TRUE;
HexEdit_SetMaxBufferSize(hed->hWndSelf, bufsize - 1);
hed->InMid = FALSE;
}
@ -1056,6 +1247,9 @@ HEXEDIT_WM_KEYDOWN(PHEXEDIT_DATA hed, INT VkCode)
InvalidateRect(hed->hWndSelf, NULL, TRUE);
HEXEDIT_MoveCaret(hed, TRUE);
break;
default:
return TRUE;
}
return FALSE;
@ -1185,6 +1379,40 @@ HEXEDIT_WM_SIZE(PHEXEDIT_DATA hed, DWORD sType, WORD NewWidth, WORD NewHeight)
return 0;
}
static VOID
HEXEDIT_WM_CONTEXTMENU(PHEXEDIT_DATA hed, INT x, INT y)
{
HMENU hMenu;
RECT rc;
if (x == -1 && y == -1)
{
GetWindowRect(hed->hWndSelf, &rc);
x = rc.left;
y = rc.top;
}
hMenu = GetSubMenu(hPopupMenus, PM_HEXEDIT);
if (hed->SelStart == hed->SelEnd)
{
EnableMenuItem(hMenu, ID_HEXEDIT_CUT, MF_GRAYED);
EnableMenuItem(hMenu, ID_HEXEDIT_COPY, MF_GRAYED);
EnableMenuItem(hMenu, ID_HEXEDIT_PASTE, MF_GRAYED);
EnableMenuItem(hMenu, ID_HEXEDIT_DELETE, MF_GRAYED);
}
else
{
EnableMenuItem(hMenu, ID_HEXEDIT_CUT, MF_ENABLED);
EnableMenuItem(hMenu, ID_HEXEDIT_COPY, MF_ENABLED);
EnableMenuItem(hMenu, ID_HEXEDIT_PASTE, MF_ENABLED);
EnableMenuItem(hMenu, ID_HEXEDIT_DELETE, MF_ENABLED);
}
SetForegroundWindow(hed->hWndSelf);
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, x, y, 0, hed->hWndSelf, NULL);
PostMessage(hed->hWndSelf, WM_NULL, 0, 0);
}
INT_PTR CALLBACK
HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
@ -1291,11 +1519,32 @@ HexEditWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
break;
case WM_CONTEXTMENU:
/* FIXME: Implement Cut, Copy, Paste, Delete and Select All */
HEXEDIT_WM_CONTEXTMENU(hed, (short)LOWORD(lParam), (short)HIWORD(lParam));
break;
case WM_COMMAND:
/* FIXME: Implement Cut, Copy, Paste, Delete and Select All */
switch(LOWORD(wParam))
{
case ID_HEXEDIT_CUT:
HEXEDIT_Cut(hed);
break;
case ID_HEXEDIT_COPY:
HEXEDIT_Copy(hed);
break;
case ID_HEXEDIT_PASTE:
HEXEDIT_Paste(hed);
break;
case ID_HEXEDIT_DELETE:
HEXEDIT_Delete(hed);
break;
case ID_HEXEDIT_SELECT_ALL:
HEXEDIT_SelectAll(hed);
break;
}
break;
}

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Çàïîìíÿíå ñòîéíîñòòà íà êëþ÷à", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -160,6 +160,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Z&kopírovat název klíèe", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "S&chlüsselnamen kopieren", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "&Ausschneiden", ID_HEXEDIT_CUT
MENUITEM "&Kopieren", ID_HEXEDIT_COPY
MENUITEM "&Einfügen", ID_HEXEDIT_PASTE
MENUITEM "&Löschen", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "A&lles auswählen", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&ÁíôéãñáöÞ Ïíüìáôïò Êëåéäéïý", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -160,6 +160,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -165,6 +165,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copiar nombre de clave", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -165,6 +165,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copier le nom de la clé", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -163,6 +163,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Nama Kunci", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -165,6 +165,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copia il nome della chiave", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -160,6 +160,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "キー名のコピー(&C)", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "切り取り(&C)", ID_HEXEDIT_CUT
MENUITEM "コピー(&C)", ID_HEXEDIT_COPY
MENUITEM "貼\り付け(&P)", ID_HEXEDIT_PASTE
MENUITEM "削除(&D)", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "すべて選択(&A)", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -147,6 +147,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "키 이름 복사(&C)", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Kopier nøkkelnavn", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -167,6 +167,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Kopiuj nazwê klucza", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -163,6 +163,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copiar nome da chave", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -163,6 +163,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Êîïèðîâàòü èìÿ êëþ÷à", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -147,6 +147,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -160,6 +160,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Kopiera nyckelnamn", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -163,6 +163,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Êîï³þâàòè ³ì'ÿ ðîçä³ëó", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -162,6 +162,15 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "复制项名称(&C)", ID_EDIT_COPYKEYNAME
END
POPUP ""
BEGIN
MENUITEM "C&ut", ID_HEXEDIT_CUT
MENUITEM "&Copy", ID_HEXEDIT_COPY
MENUITEM "&Paste", ID_HEXEDIT_PASTE
MENUITEM "&Delete", ID_HEXEDIT_DELETE
MENUITEM SEPARATOR
MENUITEM "Select &All", ID_HEXEDIT_SELECT_ALL
END
END

View file

@ -35,6 +35,7 @@
#define PM_MODIFYVALUE 0
#define PM_NEW 1
#define PM_TREECONTEXT 2
#define PM_HEXEDIT 3
#define MAX_NEW_KEY_LEN 128

View file

@ -108,6 +108,11 @@
#define ID_REGISTRY_PRINTSUBTREE 32832
#define ID_REGISTRY_PRINTERSETUP 32833
#define ID_REGISTRY_SAVESUBTREEAS 32834
#define ID_HEXEDIT_CUT 32835
#define ID_HEXEDIT_COPY 32836
#define ID_HEXEDIT_PASTE 32837
#define ID_HEXEDIT_DELETE 32838
#define ID_HEXEDIT_SELECT_ALL 32839
#define IDS_LICENSE 32835
#define IDS_ERROR 32836
#define IDS_BAD_VALUE 32837
@ -203,6 +208,7 @@
#define IDC_LOOKAT_DATA 2016
#define IDC_MATCHSTRING 2017
#define IDC_MATCHCASE 2018
#define IDS_FINISHEDFIND 2019
#define ID_FAVORITES_MIN 2100
@ -210,4 +216,5 @@
#define ID_ACCEL 3000
#define IDC_STATIC -1

View file

@ -540,15 +540,16 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
TCHAR szNewKey[128];
LPCTSTR pszKeyPath;
int iIndex = 1;
HKEY hRootKey;
HKEY hKey = NULL;
HKEY hNewKey = NULL;
LONG nResult;
HKEY hRootKey = NULL, hKey = NULL, hNewKey = NULL;
BOOL bSuccess = FALSE;
DWORD dwDisposition;
HTREEITEM hNewItem;
pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, hItem, &hRootKey);
if (RegOpenKey(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS)
pszKeyPath = GetItemPath(hwndTV, hItem, &hRootKey);
if (pszKeyPath[0] == TEXT('\0'))
hKey = hRootKey;
else if (RegOpenKey(hRootKey, pszKeyPath, &hKey) != ERROR_SUCCESS)
goto done;
if (LoadString(hInst, IDS_NEW_KEY, szNewKeyFormat, sizeof(szNewKeyFormat) / sizeof(szNewKeyFormat[0])) <= 0)
@ -557,13 +558,20 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
/* Need to create a new key with a unique name */
do
{
_sntprintf(szNewKey, sizeof(szNewKey) / sizeof(szNewKey[0]), szNewKeyFormat, iIndex++);
RegCreateKeyEx(hKey, szNewKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hNewKey, &dwDisposition);
if (hNewKey && (dwDisposition == REG_OPENED_EXISTING_KEY))
wsprintf(szNewKey, szNewKeyFormat, iIndex++);
nResult = RegCreateKeyEx(hKey, szNewKey, 0, NULL, 0, KEY_WRITE, NULL, &hNewKey, &dwDisposition);
if (hNewKey && dwDisposition == REG_OPENED_EXISTING_KEY)
{
RegCloseKey(hNewKey);
hNewKey = NULL;
}
else if (!hNewKey)
{
TCHAR sz[256];
wsprintf(sz, TEXT("Cannot create new key!\n\nError Code: %d"), nResult);
MessageBox(hFrameWnd, sz, NULL, MB_ICONERROR);
goto done;
}
}
while(!hNewKey);
@ -578,7 +586,7 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem)
bSuccess = TRUE;
done:
if (hKey)
if (hKey != hRootKey && hKey)
RegCloseKey(hKey);
if (hNewKey)
RegCloseKey(hNewKey);

View file

@ -4,86 +4,265 @@
* FILE: base/system/sc/create.c
* PURPOSE: Create a service
* COPYRIGHT: Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
* Roel Messiant <roelmessiant@gmail.com>
*
*/
#include "sc.h"
BOOL Create(LPCTSTR ServiceName, LPCTSTR *ServiceArgs)
typedef struct
{
LPCTSTR lpOption;
DWORD dwValue;
} OPTION_INFO;
typedef struct
{
LPCTSTR lpServiceName;
LPCTSTR lpDisplayName;
DWORD dwServiceType;
DWORD dwStartType;
DWORD dwErrorControl;
LPCTSTR lpBinaryPathName;
LPCTSTR lpLoadOrderGroup;
DWORD dwTagId;
LPCTSTR lpDependencies;
LPCTSTR lpServiceStartName;
LPCTSTR lpPassword;
BOOL bTagId;
} SERVICE_CREATE_INFO, *LPSERVICE_CREATE_INFO;
static const OPTION_INFO TypeOpts[] =
{
{ _T("own"), SERVICE_WIN32_OWN_PROCESS },
{ _T("share"), SERVICE_WIN32_SHARE_PROCESS },
{ _T("interact"), SERVICE_INTERACTIVE_PROCESS },
{ _T("kernel"), SERVICE_KERNEL_DRIVER },
{ _T("filesys"), SERVICE_FILE_SYSTEM_DRIVER },
{ _T("rec"), SERVICE_RECOGNIZER_DRIVER }
};
static const OPTION_INFO StartOpts[] =
{
{ _T("boot"), SERVICE_BOOT_START },
{ _T("system"), SERVICE_SYSTEM_START },
{ _T("auto"), SERVICE_AUTO_START },
{ _T("demand"), SERVICE_DEMAND_START },
{ _T("disabled"), SERVICE_DISABLED }
};
static const OPTION_INFO ErrorOpts[] =
{
{ _T("normal"), SERVICE_ERROR_NORMAL },
{ _T("severe"), SERVICE_ERROR_SEVERE },
{ _T("critical"), SERVICE_ERROR_CRITICAL },
{ _T("ignore"), SERVICE_ERROR_IGNORE }
};
static const OPTION_INFO TagOpts[] =
{
{ _T("yes"), TRUE },
{ _T("no"), FALSE }
};
static BOOL ParseCreateArguments(
LPCTSTR *ServiceArgs,
INT ArgCount,
OUT LPSERVICE_CREATE_INFO lpServiceInfo
)
{
INT i, ArgIndex = 1;
if (ArgCount < 1)
return FALSE;
ZeroMemory(lpServiceInfo, sizeof(SERVICE_CREATE_INFO));
lpServiceInfo->lpServiceName = ServiceArgs[0];
ArgCount--;
while (ArgCount > 1)
{
if (!lstrcmpi(ServiceArgs[ArgIndex], _T("type=")))
{
for (i = 0; i < sizeof(TypeOpts) / sizeof(TypeOpts[0]); i++)
if (!lstrcmpi(ServiceArgs[ArgIndex + 1], TypeOpts[i].lpOption))
{
lpServiceInfo->dwServiceType |= TypeOpts[i].dwValue;
break;
}
if (i == sizeof(TypeOpts) / sizeof(TypeOpts[0]))
break;
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("start=")))
{
for (i = 0; i < sizeof(StartOpts) / sizeof(StartOpts[0]); i++)
if (!lstrcmpi(ServiceArgs[ArgIndex + 1], StartOpts[i].lpOption))
{
lpServiceInfo->dwStartType = StartOpts[i].dwValue;
break;
}
if (i == sizeof(StartOpts) / sizeof(StartOpts[0]))
break;
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("error=")))
{
for (i = 0; i < sizeof(ErrorOpts) / sizeof(ErrorOpts[0]); i++)
if (!lstrcmpi(ServiceArgs[ArgIndex + 1], ErrorOpts[i].lpOption))
{
lpServiceInfo->dwErrorControl = ErrorOpts[i].dwValue;
break;
}
if (i == sizeof(ErrorOpts) / sizeof(ErrorOpts[0]))
break;
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("tag=")))
{
for (i = 0; i < sizeof(TagOpts) / sizeof(TagOpts[0]); i++)
if (!lstrcmpi(ServiceArgs[ArgIndex + 1], TagOpts[i].lpOption))
{
lpServiceInfo->bTagId = TagOpts[i].dwValue;
break;
}
if (i == sizeof(TagOpts) / sizeof(TagOpts[0]))
break;
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("binpath=")))
{
lpServiceInfo->lpBinaryPathName = ServiceArgs[ArgIndex + 1];
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("group=")))
{
lpServiceInfo->lpLoadOrderGroup = ServiceArgs[ArgIndex + 1];
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("depend=")))
{
lpServiceInfo->lpDependencies = ServiceArgs[ArgIndex + 1];
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("obj=")))
{
lpServiceInfo->lpServiceStartName = ServiceArgs[ArgIndex + 1];
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("displayname=")))
{
lpServiceInfo->lpDisplayName = ServiceArgs[ArgIndex + 1];
}
else if (!lstrcmpi(ServiceArgs[ArgIndex], _T("password=")))
{
lpServiceInfo->lpPassword = ServiceArgs[ArgIndex + 1];
}
ArgIndex += 2;
ArgCount -= 2;
}
return (ArgCount == 0);
}
BOOL Create(LPCTSTR *ServiceArgs, INT ArgCount)
{
SC_HANDLE hSCManager;
SC_HANDLE hSc;
BOOL bRet = FALSE;
DWORD dwServiceType = SERVICE_WIN32_OWN_PROCESS;
DWORD dwStartType = SERVICE_DEMAND_START;
DWORD dwErrorControl = SERVICE_ERROR_NORMAL;
LPCTSTR lpBinaryPathName = NULL;
LPCTSTR lpLoadOrderGroup = NULL;
DWORD dwTagId = 0;
LPCTSTR lpDependencies = NULL;
LPCTSTR lpServiceStartName = NULL;
LPCTSTR lpPassword = NULL;
INT i;
INT Length;
LPTSTR lpBuffer = NULL;
SERVICE_CREATE_INFO ServiceInfo;
/* quick hack to get it working */
lpBinaryPathName = *ServiceArgs;
#ifdef SCDBG
_tprintf(_T("service name - %s\n"), ServiceName);
_tprintf(_T("display name - %s\n"), ServiceName);
_tprintf(_T("service type - %lu\n"), dwServiceType);
_tprintf(_T("start type - %lu\n"), dwStartType);
_tprintf(_T("error control - %lu\n"), dwErrorControl);
_tprintf(_T("Binary path - %s\n"), lpBinaryPathName);
_tprintf(_T("load order group - %s\n"), lpLoadOrderGroup);
_tprintf(_T("tag - %lu\n"), dwTagId);
_tprintf(_T("dependincies - %s\n"), lpDependencies);
_tprintf(_T("account start name - %s\n"), lpServiceStartName);
_tprintf(_T("account password - %s\n"), lpPassword);
#endif
if (!ServiceName)
if (!ParseCreateArguments(ServiceArgs, ArgCount, &ServiceInfo))
{
CreateUsage();
return FALSE;
}
hSCManager = OpenSCManager(NULL,
NULL,
SC_MANAGER_CREATE_SERVICE);
if (hSCManager == NULL)
if (!ServiceInfo.dwServiceType)
ServiceInfo.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
if (!ServiceInfo.dwStartType)
ServiceInfo.dwStartType = SERVICE_DEMAND_START;
if (!ServiceInfo.dwErrorControl)
ServiceInfo.dwErrorControl = SERVICE_ERROR_NORMAL;
if (ServiceInfo.lpDependencies)
{
ReportLastError();
return FALSE;
Length = lstrlen(ServiceInfo.lpDependencies);
lpBuffer = HeapAlloc(GetProcessHeap(),
0,
(Length + 2) * sizeof(TCHAR));
for (i = 0; i < Length; i++)
if (ServiceInfo.lpDependencies[i] == _T('/'))
lpBuffer[i] = 0;
else
lpBuffer[i] = ServiceInfo.lpDependencies[i];
lpBuffer[Length] = 0;
lpBuffer[Length + 1] = 0;
ServiceInfo.lpDependencies = lpBuffer;
}
hSc = CreateService(hSCManager,
ServiceName,
ServiceName,
SERVICE_ALL_ACCESS,
dwServiceType,
dwStartType,
dwErrorControl,
lpBinaryPathName,
lpLoadOrderGroup,
&dwTagId,
lpDependencies,
lpServiceStartName,
lpPassword);
#ifdef SCDBG
_tprintf(_T("service name - %s\n"), ServiceInfo.lpServiceName);
_tprintf(_T("display name - %s\n"), ServiceInfo.lpDisplayName);
_tprintf(_T("service type - %lu\n"), ServiceInfo.dwServiceType);
_tprintf(_T("start type - %lu\n"), ServiceInfo.dwStartType);
_tprintf(_T("error control - %lu\n"), ServiceInfo.dwErrorControl);
_tprintf(_T("Binary path - %s\n"), ServiceInfo.lpBinaryPathName);
_tprintf(_T("load order group - %s\n"), ServiceInfo.lpLoadOrderGroup);
_tprintf(_T("tag - %lu\n"), ServiceInfo.dwTagId);
_tprintf(_T("dependencies - %s\n"), ServiceInfo.lpDependencies);
_tprintf(_T("account start name - %s\n"), ServiceInfo.lpServiceStartName);
_tprintf(_T("account password - %s\n"), ServiceInfo.lpPassword);
#endif
if (hSc == NULL)
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
if (hSCManager != NULL)
{
ReportLastError();
hSc = CreateService(hSCManager,
ServiceInfo.lpServiceName,
ServiceInfo.lpDisplayName,
SERVICE_ALL_ACCESS,
ServiceInfo.dwServiceType,
ServiceInfo.dwStartType,
ServiceInfo.dwErrorControl,
ServiceInfo.lpBinaryPathName,
ServiceInfo.lpLoadOrderGroup,
ServiceInfo.bTagId ? &ServiceInfo.dwTagId : NULL,
ServiceInfo.lpDependencies,
ServiceInfo.lpServiceStartName,
ServiceInfo.lpPassword);
if (hSc != NULL)
{
_tprintf(_T("[SC] CreateService SUCCESS\n"));
CloseServiceHandle(hSc);
bRet = TRUE;
}
else
ReportLastError();
CloseServiceHandle(hSCManager);
}
else
{
_tprintf(_T("[SC] CreateService SUCCESS\n"));
ReportLastError();
CloseServiceHandle(hSc);
CloseServiceHandle(hSCManager);
bRet = TRUE;
}
if (lpBuffer != NULL)
HeapFree(GetProcessHeap(), 0, lpBuffer);
return bRet;
}

View file

@ -67,11 +67,11 @@ ScControl(LPCTSTR Server, // remote machine name
}
else if (!lstrcmpi(Command, _T("start")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ServiceName)
if (ArgCount > 0)
{
ServiceName = *ServiceArgs++;
ArgCount--;
Start(ServiceName,
ServiceArgs,
ArgCount);
@ -81,11 +81,11 @@ ScControl(LPCTSTR Server, // remote machine name
}
else if (!lstrcmpi(Command, _T("pause")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ServiceName)
if (ArgCount > 0)
{
ServiceName = *ServiceArgs++;
ArgCount--;
Control(SERVICE_CONTROL_PAUSE,
ServiceName,
ServiceArgs,
@ -96,11 +96,11 @@ ScControl(LPCTSTR Server, // remote machine name
}
else if (!lstrcmpi(Command, _T("interrogate")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ServiceName)
if (ArgCount > 0)
{
ServiceName = *ServiceArgs++;
ArgCount--;
Control(SERVICE_CONTROL_INTERROGATE,
ServiceName,
ServiceArgs,
@ -111,11 +111,11 @@ ScControl(LPCTSTR Server, // remote machine name
}
else if (!lstrcmpi(Command, _T("stop")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ServiceName)
if (ArgCount > 0)
{
ServiceName = *ServiceArgs++;
ArgCount--;
Control(SERVICE_CONTROL_STOP,
ServiceName,
ServiceArgs,
@ -126,11 +126,11 @@ ScControl(LPCTSTR Server, // remote machine name
}
else if (!lstrcmpi(Command, _T("continue")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ServiceName)
if (ArgCount > 0)
{
ServiceName = *ServiceArgs++;
ArgCount--;
Control(SERVICE_CONTROL_CONTINUE,
ServiceName,
ServiceArgs,
@ -141,51 +141,49 @@ ScControl(LPCTSTR Server, // remote machine name
}
else if (!lstrcmpi(Command, _T("delete")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ArgCount > 0)
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (ServiceName)
Delete(ServiceName);
}
else
DeleteUsage();
}
else if (!lstrcmpi(Command, _T("create")))
{
ServiceName = *ServiceArgs++;
ArgCount--;
if (*ServiceArgs)
Create(ServiceName,
ServiceArgs);
else
CreateUsage();
Create(ServiceArgs, ArgCount);
}
else if (!lstrcmpi(Command, _T("control")))
{
INT CtlValue;
ServiceName = *ServiceArgs++;
ArgCount--;
CtlValue = _ttoi(ServiceArgs[0]);
ServiceArgs++;
ArgCount--;
if (ServiceName)
if (ArgCount > 1)
{
if ((CtlValue >=128) && CtlValue <= 255)
{
ServiceName = *ServiceArgs++;
ArgCount--;
CtlValue = _ttoi(ServiceArgs[0]);
ServiceArgs++;
ArgCount--;
if ((CtlValue >= 128) && (CtlValue <= 255))
Control(CtlValue,
ServiceName,
ServiceArgs,
ArgCount);
return 0;
}
else
ControlUsage();
}
ContinueUsage();
else
ControlUsage();
}
else
{
MainUsage();
}
return 0;
}

View file

@ -7,7 +7,7 @@
/* control functions */
BOOL Start(LPCTSTR ServiceName, LPCTSTR *ServiceArgs, INT ArgCount);
BOOL Create(LPCTSTR ServiceName, LPCTSTR *ServiceArgs);
BOOL Create(LPCTSTR *ServiceArgs, INT ArgCount);
BOOL Delete(LPCTSTR ServiceName);
BOOL Control(DWORD Control, LPCTSTR ServiceName, LPCTSTR *Args, INT ArgCount);
BOOL Query(LPCTSTR *ServiceArgs, DWORD ArgCount, BOOL bExtended);
@ -29,3 +29,4 @@ VOID ConfigUsage(VOID);
VOID DescriptionUsage(VOID);
VOID DeleteUsage(VOID);
VOID CreateUsage(VOID);
VOID ControlUsage(VOID);

View file

@ -118,7 +118,7 @@ VOID InterrogateUsage(VOID)
VOID StopUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends an STOP control request to a service.\n")
_T(" Sends a STOP control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> stop [service name]\n"));
}
@ -126,7 +126,7 @@ VOID StopUsage(VOID)
VOID ContinueUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends an CONTINUE control request to a service.\n")
_T(" Sends a CONTINUE control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> continue [service name]\n"));
}
@ -179,3 +179,11 @@ VOID CreateUsage(VOID)
_T(" DisplayName= <display name>\n")
_T(" password= <password>\n"));
}
VOID ControlUsage(VOID)
{
_tprintf(_T("DESCRIPTION:\n")
_T(" Sends a CONTROL control request to a service.\n")
_T("USAGE:\n")
_T(" sc <server> control [service name] <value>\n"));
}

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:
*

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* debug.cpp
* debug.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
* 2005 Klemens Friedl <frik85@reactos.at>

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* endproc.cpp
* endproc.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
* 2005 Klemens Friedl <frik85@reactos.at>

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* graph.cpp
* graph.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
*

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* GraphCtrl.cpp
* graphctl.c
*
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
*
@ -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,

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* GraphCtrl.h
* graphctl.h
*
* Copyright (C) 2002 Robert Dickenson <robd@reactos.org>
*

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -159,6 +159,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -45,67 +45,54 @@ BEGIN
END
MENUITEM SEPARATOR
MENUITEM "Iconos &Grandes", ID_VIEW_LARGE
MENUITEM "Iconos &Pequeños", ID_VIEW_SMALL
MENUITEM "&Detalles", ID_VIEW_DETAILS,
CHECKED
MENUITEM "&Seleccionar Columnas...",
ID_VIEW_SELECTCOLUMNS
MENUITEM "Iconos &Grandes", ID_VIEW_LARGE
MENUITEM "Iconos &Pequeños", ID_VIEW_SMALL
MENUITEM "&Detalles", ID_VIEW_DETAILS, CHECKED
MENUITEM "&Seleccionar Columnas...", ID_VIEW_SELECTCOLUMNS
POPUP "Historial de la &CPU"
BEGIN
MENUITEM "&Una Gráfica, Todas las CPUs",
ID_VIEW_CPUHISTORY_ONEGRAPHALL
MENUITEM "&Una Gráfica, Todas las CPUs", ID_VIEW_CPUHISTORY_ONEGRAPHALL
MENUITEM "Una Gráfica, &Por CPU",
ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU
, CHECKED
MENUITEM "Una Gráfica, &Por CPU", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU, CHECKED
END
MENUITEM "&Mostrar tiempos del Núcleo",
ID_VIEW_SHOWKERNELTIMES
MENUITEM "&Mostrar tiempos del Núcleo", ID_VIEW_SHOWKERNELTIMES
END
POPUP "&Ventanas"
BEGIN
MENUITEM "Mosaico &Horizontal",
ID_WINDOWS_TILEHORIZONTALLY
MENUITEM "Mosaico &Vertical",
ID_WINDOWS_TILEVERTICALLY
MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE
MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE
MENUITEM "&Cascada", ID_WINDOWS_CASCADE
MENUITEM "&Traer al Frente",
ID_WINDOWS_BRINGTOFRONT
MENUITEM "Mosaico &Horizontal", ID_WINDOWS_TILEHORIZONTALLY
MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY
MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE
MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE
MENUITEM "&Cascada", ID_WINDOWS_CASCADE
MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT
END
POPUP "A&yuda"
BEGIN
MENUITEM "&Temas de Ayuda del Administrador de Tareas",
ID_HELP_TOPICS
MENUITEM "&Temas de Ayuda del Administrador de Tareas", ID_HELP_TOPICS
MENUITEM SEPARATOR
MENUITEM "&Acerca del Administrador de Tareas",
ID_HELP_ABOUT
MENUITEM "&Acerca del Administrador de Tareas", ID_HELP_ABOUT
END
END
IDR_WINDOWSMENU MENU DISCARDABLE
BEGIN
MENUITEM "Mosaico &Horizontal",
ID_WINDOWS_TILEHORIZONTALLY
MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY
MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE
MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE
MENUITEM "Mosaico &Horizontal", ID_WINDOWS_TILEHORIZONTALLY
MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY
MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE
MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE
MENUITEM "&Cascada", ID_WINDOWS_CASCADE
MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT
MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT
END
IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE
BEGIN
POPUP "DUMMY"
BEGIN
MENUITEM "&Nueva Tarea (Ejecutar...)", ID_FILE_NEW
MENUITEM "&Nueva Tarea (Ejecutar...)", ID_FILE_NEW
MENUITEM SEPARATOR
MENUITEM "Iconos &Grandes", ID_VIEW_LARGE
MENUITEM "Iconos &Pequeños", ID_VIEW_SMALL
MENUITEM "&Detalles", ID_VIEW_DETAILS,
CHECKED
MENUITEM "Iconos &Grandes", ID_VIEW_LARGE
MENUITEM "Iconos &Pequeños", ID_VIEW_SMALL
MENUITEM "&Detalles", ID_VIEW_DETAILS, CHECKED
END
END
@ -113,21 +100,17 @@ IDR_APPLICATION_PAGE_CONTEXT2 MENU DISCARDABLE
BEGIN
POPUP "DUMMY"
BEGIN
MENUITEM "&Cambiar A",
ID_APPLICATION_PAGE_SWITCHTO
MENUITEM "&Traer al Frente",
ID_WINDOWS_BRINGTOFRONT
MENUITEM "&Cambiar A", ID_APPLICATION_PAGE_SWITCHTO
MENUITEM "&Traer al Frente", ID_WINDOWS_BRINGTOFRONT
MENUITEM SEPARATOR
MENUITEM "Mosaico &Horizontal",
ID_WINDOWS_TILEHORIZONTALLY
MENUITEM "Mosaico &Vertical",
ID_WINDOWS_TILEVERTICALLY
MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE
MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE
MENUITEM "Ca&scada", ID_WINDOWS_CASCADE
MENUITEM "Mosaico &Horizontal", ID_WINDOWS_TILEHORIZONTALLY
MENUITEM "Mosaico &Vertical", ID_WINDOWS_TILEVERTICALLY
MENUITEM "&Minimizar", ID_WINDOWS_MINIMIZE
MENUITEM "Ma&ximizar", ID_WINDOWS_MAXIMIZE
MENUITEM "Ca&scada", ID_WINDOWS_CASCADE
MENUITEM SEPARATOR
MENUITEM "&Finalizar Tarea", ID_APPLICATION_PAGE_ENDTASK
MENUITEM "&Ir al Proceso", ID_APPLICATION_PAGE_GOTOPROCESS
MENUITEM "&Finalizar Tarea", ID_APPLICATION_PAGE_ENDTASK
MENUITEM "&Ir al Proceso", ID_APPLICATION_PAGE_GOTOPROCESS
END
END
@ -136,10 +119,10 @@ IDR_TRAY_POPUP MENU DISCARDABLE
BEGIN
POPUP "DUMMY"
BEGIN
MENUITEM "&Restaurar", ID_RESTORE
MENUITEM "&Cerrar", ID_FILE_EXIT
MENUITEM "&Restaurar", ID_RESTORE
MENUITEM "&Cerrar", ID_FILE_EXIT
MENUITEM SEPARATOR
MENUITEM "&Siempre Visible", ID_OPTIONS_ALWAYSONTOP
MENUITEM "&Siempre Visible", ID_OPTIONS_ALWAYSONTOP
END
END
@ -147,27 +130,27 @@ IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE
BEGIN
POPUP "DUMMY"
BEGIN
MENUITEM "&Finalizar Proceso", ID_PROCESS_PAGE_ENDPROCESS
MENUITEM "Finalizar &Árbol de Procesos", ID_PROCESS_PAGE_ENDPROCESSTREE
MENUITEM "&Finalizar Proceso", ID_PROCESS_PAGE_ENDPROCESS
MENUITEM "Finalizar &Árbol de Procesos", ID_PROCESS_PAGE_ENDPROCESSTREE
MENUITEM "&Depurador", ID_PROCESS_PAGE_DEBUG
MENUITEM SEPARATOR
POPUP "Establecer &Prioridad"
BEGIN
MENUITEM "Tiempo-&Real", ID_PROCESS_PAGE_SETPRIORITY_REALTIME
MENUITEM "Tiempo-&Real", ID_PROCESS_PAGE_SETPRIORITY_REALTIME
MENUITEM "&Alta", ID_PROCESS_PAGE_SETPRIORITY_HIGH
MENUITEM "Arr&iba de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL
MENUITEM "Arr&iba de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL
MENUITEM "&Normal", ID_PROCESS_PAGE_SETPRIORITY_NORMAL
MENUITEM "&Debajo de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL
MENUITEM "&Debajo de lo Normal", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL
MENUITEM "&Baja", ID_PROCESS_PAGE_SETPRIORITY_LOW
MENUITEM "&Baja", ID_PROCESS_PAGE_SETPRIORITY_LOW
END
MENUITEM "Establecer &Afinidad...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM "Establecer &Afinidad...", ID_PROCESS_PAGE_SETAFFINITY
MENUITEM "Editar &Canales de Depuración...", ID_PROCESS_PAGE_DEBUGCHANNELS
END
END
@ -177,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
@ -186,8 +170,7 @@ CAPTION "Administrador de Tareas"
MENU IDR_TASKMANAGER
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL
"Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,3,3,257,228
CONTROL "Tab1",IDC_TAB,"SysTabControl32",WS_TABSTOP,3,3,257,228
END
IDD_APPLICATION_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210
@ -195,8 +178,7 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List2",IDC_APPLIST,"SysListView32",LVS_REPORT |
LVS_SHOWSELALWAYS | WS_BORDER |
WS_TABSTOP,7,7,233,177
LVS_SHOWSELALWAYS | WS_BORDER |WS_TABSTOP,7,7,233,177
PUSHBUTTON "&Nueva Tarea...",IDC_NEWTASK,187,189,53,14
PUSHBUTTON "&Cambiar A",IDC_SWITCHTO,131,189,53,14,WS_DISABLED
PUSHBUTTON "&Finalizar Tarea",IDC_ENDTASK,75,189,53,14,WS_DISABLED
@ -206,8 +188,7 @@ IDD_PROCESS_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT
|
CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS |
WS_BORDER | WS_TABSTOP,7,7,233,177
PUSHBUTTON "&Finalizar Proceso",IDC_ENDPROCESS,171,189,69,14
@ -251,8 +232,7 @@ BEGIN
ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE,185,140,48,8,ES_RIGHT |
ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
EDITTEXT
IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT |
EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT |
ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
LTEXT "Total",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8
LTEXT "Paginado",IDS_KERNEL_MEMORY_PAGED,137,184,30,8
@ -265,10 +245,8 @@ IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT |
ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP
GROUPBOX "Historial de uso de la CPU",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT
GROUPBOX "Historial de uso de la Memoria",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT
PUSHBUTTON "Display de uso de la CPU",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,
WS_EX_CLIENTEDGE
PUSHBUTTON "Display de uso de la Memoria",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,
WS_EX_CLIENTEDGE
PUSHBUTTON "Display de uso de la CPU",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
PUSHBUTTON "Display de uso de la Memoria",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
PUSHBUTTON "Historial de uso de la CPU",IDC_CPU_USAGE_HISTORY_GRAPH,81,17,
153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE
PUSHBUTTON "Historial de uso de la Memoria",IDC_MEM_USAGE_HISTORY_GRAPH,81,75,
@ -281,8 +259,7 @@ CAPTION "Canales de Depuraci
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "List2",IDC_DEBUG_CHANNELS_LIST,"SysListView32",LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER |
WS_TABSTOP |
LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP |
LVS_SORTASCENDING,7,7,233,177
PUSHBUTTON "Cerrar",IDOK,171,189,69,14
END
@ -389,8 +366,7 @@ BEGIN
WS_TABSTOP,7,105,80,10 //53
CONTROL "O&bjetos de USUARIO",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,116,80,10 //62
CONTROL "Lecturas E/S",IDC_IOREADS,"Button",BS_AUTOCHECKBOX
|
CONTROL "Lecturas E/S",IDC_IOREADS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,127,60,10 //49
CONTROL "Bytes E/S Leidos",IDC_IOREADBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,138,65,10
@ -610,7 +586,6 @@ BEGIN
ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL
"Establece el proceso en prioridad ABAJO DE LO NORMAL"
ID_PROCESS_PAGE_SETPRIORITY_LOW "Establece el proceso en prioridad BAJA"
END // Spanish (SPAIN) resources by Carlos Garcia Gomez

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -161,6 +161,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -159,6 +159,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -163,6 +163,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,12 +160,13 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
CAPTION "Oppgavebehandler"
CAPTION "Oppgavebehandling"
MENU IDR_TASKMANAGER
FONT 8, "MS Shell Dlg"
BEGIN

View file

@ -165,6 +165,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
@ -520,8 +521,8 @@ END
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "Gestionar de activități"
IDC_TASKMGR "Gestoinar de activități"
IDS_APP_TITLE "Gestionarul de activități"
IDC_TASKMGR "Gestionarul de activități"
IDS_IDLE_PROCESS "Proces sistem inactiv"
END

View file

@ -159,6 +159,7 @@ END
//
// Äèàëîãè
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -159,6 +159,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
@ -521,8 +522,8 @@ END
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "Správca úloh"
IDC_TASKMGR "Správca úloh"
IDS_APP_TITLE "Správca úloh systému"
IDC_TASKMGR "Správca úloh systému"
IDS_IDLE_PROCESS "Procesy systémovej neèinnosti"
END

View file

@ -177,6 +177,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -160,6 +160,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |
@ -338,65 +339,65 @@ BEGIN
WS_DISABLED | WS_TABSTOP,175,119,41,10
END
IDD_COLUMNS_DIALOG DIALOGEX DISCARDABLE 0, 0, 195, 199
IDD_COLUMNS_DIALOG DIALOGEX DISCARDABLE 0, 0, 227, 199
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Âèá³ð ñòîâïö³â"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "Òàê",IDOK,84,178,50,14
PUSHBUTTON "ͳ",IDCANCEL,138,178,50,14
LTEXT "Âèáåð³òü ñòîâïö³, ÿê³ ñë³ä â³äîáðàæàòè íà âêëàäö³ Ïðîöåñ äèñïåò÷åðà çàâäàíü.",
DEFPUSHBUTTON "ÎÊ",IDOK,116,178,50,14
PUSHBUTTON "Ñêàñóâàòè",IDCANCEL,170,178,50,14
LTEXT "Âèáåð³òü ñòîâïö³, ÿê³ ñë³ä â³äîáðàæàòè íà âêëàäö³ Ïðîöåñè äèñïåò÷åðà çàâäàíü.",
IDC_STATIC,7,7,181,17
CONTROL "&²ì'ÿ îáðàçó",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX |
WS_DISABLED | WS_TABSTOP,7,28,56,10
CONTROL "²äåíòè&ô. ïðîöåñó (PID)",IDC_PID,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,39,88,10
BS_AUTOCHECKBOX | WS_TABSTOP,7,39,91,10
CONTROL "&Âèêîðèñòàííÿ ÖÏ",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,50,53,10
WS_TABSTOP,7,50,71,10
CONTROL "&×àñ ÖÏ",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,61,48,10
CONTROL "&Ïàì'ÿòü - âèêîðèñòàííÿ",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,72,63,10
WS_TABSTOP,7,72,92,10
CONTROL "Ïàì'ÿòü - çì³&íà",IDC_MEMORYUSAGEDELTA,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,83,82,10
CONTROL "Ïàì'ÿòü - &ìàêñèìóì",IDC_PEAKMEMORYUSAGE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,94,82,10
CONTROL "Ï&îìèëîê ñòîð³íêè",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,105,53,10
WS_TABSTOP,7,105,73,10
CONTROL "Î&á'ºêòè USER",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,116,62,10
CONTROL "ʳëüê³ñòü ÷èòàíü",IDC_IOREADS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,127,49,10
WS_TABSTOP,7,127,68,10
CONTROL "Ïðî÷èòàíî áàéò³â",IDC_IOREADBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,7,138,65,10
BS_AUTOCHECKBOX | WS_TABSTOP,7,138,72,10
CONTROL "Êîä ñå&àíñó",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,149,50,10
CONTROL "²ì'&ÿ êîðèñòóâà÷à",IDC_USERNAME,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,160,51,10
WS_TABSTOP,7,160,70,10
CONTROL "Ïîìèëîê &ñòîð³íêè - çì³íà",IDC_PAGEFAULTSDELTA,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,28,72,10
CONTROL "Îá'ºì â³ðòóàë&üíî¿ ïàì'ÿò³",IDC_VIRTUALMEMORYSIZE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,39,77,10
BS_AUTOCHECKBOX | WS_TABSTOP,107,39,100,10
CONTROL "Âèâàíòà&æóâàíèé ïóë",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,107,50,53,10
WS_TABSTOP,107,50,88,10
CONTROL "Íåâèâàíòàæ&óâàíèé ïóë",IDC_NONPAGEDPOOL,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,61,67,10
BS_AUTOCHECKBOX | WS_TABSTOP,107,61,96,10
CONTROL "Áàçîâè&é ïð³îðèòåò",IDC_BASEPRIORITY,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,72,55,10
BS_AUTOCHECKBOX | WS_TABSTOP,107,72,75,10
CONTROL "˳÷èëüíèê &äåñêðèïòîð³â",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,107,83,59,10
WS_TABSTOP,107,83,98,10
CONTROL "&˳÷èëüíèê ïîòîê³â",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,107,94,59,10
WS_TABSTOP,107,94,79,10
CONTROL "Îá'&ºêòè GDI",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,107,105,55,10
CONTROL "ʳëüê³ñòü çàïèñ³â",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,107,116,49,10
WS_TABSTOP,107,116,73,10
CONTROL "Çàïèñàíî áàéò³â",IDC_IOWRITEBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,127,65,10
BS_AUTOCHECKBOX | WS_TABSTOP,107,127,67,10
CONTROL "²íøèé ââ³ä-âèâ³ä",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,107,138,46,10
CONTROL "²íøèõ áàéò³â ï³ä ÷àñ ââîäó-âèâîäó",IDC_IOOTHERBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,149,65,10
WS_TABSTOP,107,138,71,10
CONTROL "²íøèõ áàéò³â ïðè ââîä³-âèâîä³",IDC_IOOTHERBYTES,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,107,149,114,10
END
@ -522,7 +523,7 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "Äèñïåò÷åð çàâäàíü"
IDC_TASKMGR "Äèñïåò÷åð çàâäàíü"
IDS_IDLE_PROCESS "Íåä³ÿííÿ ñèñòåìè"
IDS_IDLE_PROCESS "Áåçä³ÿëüí³ñòü ñèñòåìè"
END
STRINGTABLE DISCARDABLE

View file

@ -168,6 +168,7 @@ END
//
// Dialog
//
// TRANSLATORS: CAPTION must be the same as IDS_APP_TITLE to be brought back to focus when already opened
IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246
STYLE DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP |

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* optnmenu.cpp
* optnmenu.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
*
@ -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.
*/

View file

@ -1,7 +1,7 @@
/*
* ReactOS Task Manager
*
* perfdata.cpp
* perfdata.c
*
* Copyright (C) 1999 - 2001 Brian Palmer <brianp@reactos.org>
*

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)

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))

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 <brianp@reactos.org>
* 2005 Klemens Friedl <frik85@reactos.at>
@ -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;
}

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
}

View file

@ -31,6 +31,75 @@
#define SECTORSIZE 512
#include <pshpack1.h>
typedef struct _FAT_BOOTSECTOR
{
UCHAR JumpBoot[3]; // Jump instruction to boot code
CHAR OemName[8]; // "MSWIN4.1" for MS formatted volumes
USHORT BytesPerSector; // Bytes per sector
UCHAR SectorsPerCluster; // Number of sectors in a cluster
USHORT ReservedSectors; // Reserved sectors, usually 1 (the bootsector)
UCHAR NumberOfFats; // Number of FAT tables
USHORT RootDirEntries; // Number of root directory entries (fat12/16)
USHORT TotalSectors; // Number of total sectors on the drive, 16-bit
UCHAR MediaDescriptor; // Media descriptor byte
USHORT SectorsPerFat; // Sectors per FAT table (fat12/16)
USHORT SectorsPerTrack; // Number of sectors in a track
USHORT NumberOfHeads; // Number of heads on the disk
ULONG HiddenSectors; // Hidden sectors (sectors before the partition start like the partition table)
ULONG TotalSectorsBig; // This field is the new 32-bit total count of sectors on the volume
UCHAR DriveNumber; // Int 0x13 drive number (e.g. 0x80)
UCHAR Reserved1; // Reserved (used by Windows NT). Code that formats FAT volumes should always set this byte to 0.
UCHAR BootSignature; // Extended boot signature (0x29). This is a signature byte that indicates that the following three fields in the boot sector are present.
ULONG VolumeSerialNumber; // Volume serial number
CHAR VolumeLabel[11]; // Volume label. This field matches the 11-byte volume label recorded in the root directory
CHAR FileSystemType[8]; // One of the strings "FAT12 ", "FAT16 ", or "FAT "
UCHAR BootCodeAndData[448]; // The remainder of the boot sector
USHORT BootSectorMagic; // 0xAA55
} FAT_BOOTSECTOR, *PFAT_BOOTSECTOR;
typedef struct _FAT32_BOOTSECTOR
{
UCHAR JumpBoot[3]; // Jump instruction to boot code
CHAR OemName[8]; // "MSWIN4.1" for MS formatted volumes
USHORT BytesPerSector; // Bytes per sector
UCHAR SectorsPerCluster; // Number of sectors in a cluster
USHORT ReservedSectors; // Reserved sectors, usually 1 (the bootsector)
UCHAR NumberOfFats; // Number of FAT tables
USHORT RootDirEntries; // Number of root directory entries (fat12/16)
USHORT TotalSectors; // Number of total sectors on the drive, 16-bit
UCHAR MediaDescriptor; // Media descriptor byte
USHORT SectorsPerFat; // Sectors per FAT table (fat12/16)
USHORT SectorsPerTrack; // Number of sectors in a track
USHORT NumberOfHeads; // Number of heads on the disk
ULONG HiddenSectors; // Hidden sectors (sectors before the partition start like the partition table)
ULONG TotalSectorsBig; // This field is the new 32-bit total count of sectors on the volume
ULONG SectorsPerFatBig; // This field is the FAT32 32-bit count of sectors occupied by ONE FAT. BPB_FATSz16 must be 0
USHORT ExtendedFlags; // Extended flags (fat32)
USHORT FileSystemVersion; // File system version (fat32)
ULONG RootDirStartCluster; // Starting cluster of the root directory (fat32)
USHORT FsInfo; // Sector number of FSINFO structure in the reserved area of the FAT32 volume. Usually 1.
USHORT BackupBootSector; // If non-zero, indicates the sector number in the reserved area of the volume of a copy of the boot record. Usually 6.
UCHAR Reserved[12]; // Reserved for future expansion
UCHAR DriveNumber; // Int 0x13 drive number (e.g. 0x80)
UCHAR Reserved1; // Reserved (used by Windows NT). Code that formats FAT volumes should always set this byte to 0.
UCHAR BootSignature; // Extended boot signature (0x29). This is a signature byte that indicates that the following three fields in the boot sector are present.
ULONG VolumeSerialNumber; // Volume serial number
CHAR VolumeLabel[11]; // Volume label. This field matches the 11-byte volume label recorded in the root directory
CHAR FileSystemType[8]; // Always set to the string "FAT32 "
UCHAR BootCodeAndData[420]; // The remainder of the boot sector
USHORT BootSectorMagic; // 0xAA55
} FAT32_BOOTSECTOR, *PFAT32_BOOTSECTOR;
#include <poppack.h>
extern PPARTLIST PartitionList;
/* FUNCTIONS ****************************************************************/
@ -1094,53 +1163,53 @@ NTSTATUS
InstallMbrBootCodeToDisk (PWSTR SrcPath,
PWSTR RootPath)
{
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
UNICODE_STRING Name;
HANDLE FileHandle;
NTSTATUS Status;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
UNICODE_STRING Name;
HANDLE FileHandle;
NTSTATUS Status;
PPARTITION_SECTOR OrigBootSector;
PPARTITION_SECTOR NewBootSector;
/* Allocate buffer for original bootsector */
/* Allocate buffer for original bootsector */
OrigBootSector = (PPARTITION_SECTOR)RtlAllocateHeap(ProcessHeap,
0,
sizeof(PARTITION_SECTOR));
if (OrigBootSector == NULL)
return(STATUS_INSUFFICIENT_RESOURCES);
/* Read current boot sector into buffer */
/* Read current boot sector into buffer */
RtlInitUnicodeString(&Name,
RootPath);
InitializeObjectAttributes(&ObjectAttributes,
&Name,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
InitializeObjectAttributes(&ObjectAttributes,
&Name,
OBJ_CASE_INSENSITIVE,
NULL,
NULL);
Status = NtOpenFile(&FileHandle,
GENERIC_READ,
&ObjectAttributes,
&IoStatusBlock,
0,
FILE_SYNCHRONOUS_IO_NONALERT);
Status = NtOpenFile(&FileHandle,
GENERIC_READ,
&ObjectAttributes,
&IoStatusBlock,
0,
FILE_SYNCHRONOUS_IO_NONALERT);
if (!NT_SUCCESS(Status))
{
RtlFreeHeap(ProcessHeap, 0, OrigBootSector);
return(Status);
}
Status = NtReadFile(FileHandle,
NULL,
NULL,
NULL,
&IoStatusBlock,
Status = NtReadFile(FileHandle,
NULL,
NULL,
NULL,
&IoStatusBlock,
OrigBootSector,
SECTORSIZE,
NULL,
NULL);
NtClose(FileHandle);
SECTORSIZE,
NULL,
NULL);
NtClose(FileHandle);
if (!NT_SUCCESS(Status))
{
RtlFreeHeap(ProcessHeap, 0, OrigBootSector);
@ -1256,11 +1325,12 @@ InstallFat16BootCodeToDisk(PWSTR SrcPath,
UNICODE_STRING Name;
HANDLE FileHandle;
NTSTATUS Status;
PUCHAR OrigBootSector;
PUCHAR NewBootSector;
PFAT_BOOTSECTOR OrigBootSector;
PFAT_BOOTSECTOR NewBootSector;
PARTITION_INFORMATION *PartInfo;
/* Allocate buffer for original bootsector */
OrigBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap,
OrigBootSector = RtlAllocateHeap(ProcessHeap,
0,
SECTORSIZE);
if (OrigBootSector == NULL)
@ -1306,7 +1376,7 @@ InstallFat16BootCodeToDisk(PWSTR SrcPath,
/* Allocate buffer for new bootsector */
NewBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap,
NewBootSector = RtlAllocateHeap(ProcessHeap,
0,
SECTORSIZE);
if (NewBootSector == NULL)
@ -1356,9 +1426,12 @@ InstallFat16BootCodeToDisk(PWSTR SrcPath,
}
/* Adjust bootsector (copy a part of the FAT16 BPB) */
memcpy((NewBootSector + 3),
(OrigBootSector + 3),
59); /* FAT16 BPB length*/
memcpy(&NewBootSector->BytesPerSector,
&OrigBootSector->BytesPerSector,
51); /* FAT16 BPB length */
PartInfo = &PartitionList->CurrentPartition->PartInfo[PartitionList->CurrentPartitionNumber];
NewBootSector->HiddenSectors = PartInfo->HiddenSectors;
/* Free the original boot sector */
RtlFreeHeap(ProcessHeap, 0, OrigBootSector);
@ -1416,13 +1489,14 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath,
UNICODE_STRING Name;
HANDLE FileHandle;
NTSTATUS Status;
PUCHAR OrigBootSector;
PUCHAR NewBootSector;
PFAT32_BOOTSECTOR OrigBootSector;
PFAT32_BOOTSECTOR NewBootSector;
LARGE_INTEGER FileOffset;
USHORT BackupBootSector;
PARTITION_INFORMATION *PartInfo;
/* Allocate buffer for original bootsector */
OrigBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap,
OrigBootSector = RtlAllocateHeap(ProcessHeap,
0,
SECTORSIZE);
if (OrigBootSector == NULL)
@ -1468,7 +1542,7 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath,
/* Allocate buffer for new bootsector (2 sectors) */
NewBootSector = (PUCHAR)RtlAllocateHeap(ProcessHeap,
NewBootSector = RtlAllocateHeap(ProcessHeap,
0,
2 * SECTORSIZE);
if (NewBootSector == NULL)
@ -1518,12 +1592,15 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath,
}
/* Adjust bootsector (copy a part of the FAT32 BPB) */
memcpy((NewBootSector + 3),
(OrigBootSector + 3),
87); /* FAT32 BPB length */
memcpy(&NewBootSector->BytesPerSector,
&OrigBootSector->BytesPerSector,
79); /* FAT32 BPB length */
PartInfo = &PartitionList->CurrentPartition->PartInfo[PartitionList->CurrentPartitionNumber];
NewBootSector->HiddenSectors = PartInfo->HiddenSectors;
/* Get the location of the backup boot sector */
BackupBootSector = (OrigBootSector[0x33] << 8) + OrigBootSector[0x32];
BackupBootSector = OrigBootSector->BackupBootSector;
/* Free the original boot sector */
RtlFreeHeap(ProcessHeap, 0, OrigBootSector);
@ -1599,7 +1676,7 @@ InstallFat32BootCodeToDisk(PWSTR SrcPath,
NULL,
NULL,
&IoStatusBlock,
(NewBootSector + SECTORSIZE),
((PUCHAR)NewBootSector + SECTORSIZE),
SECTORSIZE,
&FileOffset,
NULL);
@ -2156,6 +2233,28 @@ InstallFatBootcodeToPartition(PUNICODE_STRING SystemRootPath,
#endif
}
NTSTATUS
InstallVBRToPartition(PUNICODE_STRING SystemRootPath,
PUNICODE_STRING SourceRootPath,
PUNICODE_STRING DestinationArcPath,
UCHAR PartitionType)
{
if ((PartitionType == PARTITION_FAT_12) ||
(PartitionType == PARTITION_FAT_16) ||
(PartitionType == PARTITION_HUGE) ||
(PartitionType == PARTITION_XINT13) ||
(PartitionType == PARTITION_FAT32) ||
(PartitionType == PARTITION_FAT32_XINT13))
{
return InstallFatBootcodeToPartition(SystemRootPath,
SourceRootPath,
DestinationArcPath,
PartitionType);
}
return STATUS_UNSUCCESSFUL;
}
NTSTATUS
InstallFatBootcodeToFloppy(PUNICODE_STRING SourceRootPath,

View file

@ -78,6 +78,12 @@ InstallFatBootcodeToPartition(PUNICODE_STRING SystemRootPath,
PUNICODE_STRING DestinationArcPath,
UCHAR PartitionType);
NTSTATUS
InstallVBRToPartition(PUNICODE_STRING SystemRootPath,
PUNICODE_STRING SourceRootPath,
PUNICODE_STRING DestinationArcPath,
UCHAR PartitionType);
NTSTATUS
InstallFatBootcodeToFloppy(PUNICODE_STRING SourceRootPath,
PUNICODE_STRING DestinationArcPath);

View file

@ -65,46 +65,6 @@ InfpFindFirstLineW(
return TRUE;
}
BOOL WINAPI
InfpFindNextLine(
IN PINFCONTEXT ContextIn,
OUT PINFCONTEXT ContextOut)
{
return InfFindNextLine(ContextIn, ContextOut);
}
BOOL WINAPI
InfpGetBinaryField(
IN PINFCONTEXT Context,
IN ULONG FieldIndex,
IN OUT BYTE* ReturnBuffer,
IN ULONG ReturnBufferSize,
OUT PULONG RequiredSize)
{
return InfGetBinaryField(Context, FieldIndex, ReturnBuffer, ReturnBufferSize, RequiredSize);
}
DWORD WINAPI
InfpGetFieldCount(
IN PINFCONTEXT Context)
{
return (DWORD)InfGetFieldCount(Context);
}
BOOL WINAPI
InfpGetIntField(
IN PINFCONTEXT Context,
IN DWORD FieldIndex,
OUT PINT IntegerValue)
{
LONG IntegerValueL;
BOOL ret;
ret = InfGetIntField(Context, FieldIndex, &IntegerValueL);
*IntegerValue = (INT)IntegerValueL;
return ret;
}
BOOL WINAPI
InfpGetMultiSzFieldW(
IN PINFCONTEXT Context,

View file

@ -36,10 +36,10 @@
#define SetupCloseInfFile InfpCloseInfFile
#define SetupFindFirstLineW InfpFindFirstLineW
#define SetupFindNextLine InfpFindNextLine
#define SetupGetBinaryField InfpGetBinaryField
#define SetupGetFieldCount InfpGetFieldCount
#define SetupGetIntField InfpGetIntField
#define SetupFindNextLine InfFindNextLine
#define SetupGetBinaryField InfGetBinaryField
#define SetupGetFieldCount InfGetFieldCount
#define SetupGetIntField InfGetIntField
#define SetupGetMultiSzFieldW InfpGetMultiSzFieldW
#define SetupGetStringFieldW InfpGetStringFieldW
#define SetupOpenInfFileW InfpOpenInfFileW
@ -66,29 +66,6 @@ InfpFindFirstLineW(
IN PCWSTR Key,
IN OUT PINFCONTEXT Context);
BOOL WINAPI
InfpFindNextLine(
IN PINFCONTEXT ContextIn,
OUT PINFCONTEXT ContextOut);
BOOL WINAPI
InfpGetBinaryField(
IN PINFCONTEXT Context,
IN ULONG FieldIndex,
IN OUT BYTE* ReturnBuffer,
IN ULONG ReturnBufferSize,
OUT PULONG RequiredSize);
DWORD WINAPI
InfpGetFieldCount(
IN PINFCONTEXT Context);
BOOL WINAPI
InfpGetIntField(
IN PINFCONTEXT Context,
IN DWORD FieldIndex,
OUT PINT IntegerValue);
BOOL WINAPI
InfpGetMultiSzFieldW(
IN PINFCONTEXT Context,

View file

@ -51,11 +51,10 @@ WCHAR DefaultLanguage[20];
WCHAR DefaultKBLayout[20];
BOOLEAN RepairUpdateFlag = FALSE;
HANDLE hPnpThread = INVALID_HANDLE_VALUE;
PPARTLIST PartitionList = NULL;
/* LOCALS *******************************************************************/
static PPARTLIST PartitionList = NULL;
static PFILE_SYSTEM_LIST FileSystemList = NULL;
static UNICODE_STRING InstallPath;
@ -1402,23 +1401,24 @@ LayoutSettingsPage(PINPUT_RECORD Ir)
static BOOL
IsDiskSizeValid(PPARTENTRY PartEntry)
{
ULONGLONG m;
ULONGLONG m1, m2;
/* check for unpartitioned space */
m = PartEntry->UnpartitionedLength;
m = (m + (1 << 19)) >> 20; /* in MBytes (rounded) */
if( m > RequiredPartitionDiskSpace)
m1 = PartEntry->UnpartitionedLength;
m1 = (m1 + (1 << 19)) >> 20; /* in MBytes (rounded) */
if( m1 > RequiredPartitionDiskSpace)
{
return TRUE;
}
/* check for partitioned space */
m = PartEntry->PartInfo[0].PartitionLength.QuadPart;
m = (m + (1 << 19)) >> 20; /* in MBytes (rounded) */
if (m < RequiredPartitionDiskSpace)
m2 = PartEntry->PartInfo[0].PartitionLength.QuadPart;
m2 = (m2 + (1 << 19)) >> 20; /* in MBytes (rounded) */
if (m2 < RequiredPartitionDiskSpace)
{
/* partition is too small so ask for another partion */
DPRINT1("Partition is too small, required disk space is %lu MB\n", RequiredPartitionDiskSpace);
DPRINT1("Partition is too small(unpartitioned: %I64u MB, partitioned: %I64u MB), required disk space is %lu MB\n", m1, m2, RequiredPartitionDiskSpace);
return FALSE;
}
else
@ -2450,29 +2450,6 @@ FormatPartitionPage(PINPUT_RECORD Ir)
CheckActiveBootPartition(PartitionList);
}
/* Install MBR if necessary */
if (DiskEntry->NoMbr &&
DiskEntry->BiosDiskNumber == 0)
{
wcscpy(PathBuffer, SourceRootPath.Buffer);
wcscat(PathBuffer, L"\\loader\\dosmbr.bin");
DPRINT("Install MBR bootcode: %S ==> %S\n",
PathBuffer, DestinationRootPath.Buffer);
/* Install MBR bootcode */
Status = InstallMbrBootCodeToDisk(PathBuffer,
DestinationRootPath.Buffer);
if (!NT_SUCCESS (Status))
{
DPRINT1("InstallMbrBootCodeToDisk() failed (Status %lx)\n",
Status);
return FALSE;
}
DiskEntry->NoMbr = FALSE;
}
if (wcscmp(FileSystemList->Selected->FileSystem, L"FAT") == 0)
{
/* FIXME: Install boot code. This is a hack! */
@ -3503,7 +3480,7 @@ BootLoaderPage(PINPUT_RECORD Ir)
/* Unattended install on hdd? */
if (IsUnattendedSetup && UnattendMBRInstallType == 2)
{
return BOOT_LOADER_HARDDISK_PAGE;
return BOOT_LOADER_HARDDISK_MBR_PAGE;
}
MUIDisplayPage(BOOT_LOADER_PAGE);
@ -3520,9 +3497,9 @@ BootLoaderPage(PINPUT_RECORD Ir)
Line++;
if (Line<12)
Line=14;
Line=15;
if (Line>14)
if (Line>15)
Line=12;
CONSOLE_InvertTextXY(8, Line, 60, 1);
@ -3534,9 +3511,9 @@ BootLoaderPage(PINPUT_RECORD Ir)
Line--;
if (Line<12)
Line=14;
Line=15;
if (Line>14)
if (Line>15)
Line=12;
CONSOLE_InvertTextXY(8, Line, 60, 1);
@ -3553,13 +3530,17 @@ BootLoaderPage(PINPUT_RECORD Ir)
{
if (Line == 12)
{
return BOOT_LOADER_HARDDISK_PAGE;
return BOOT_LOADER_HARDDISK_MBR_PAGE;
}
else if (Line == 13)
{
return BOOT_LOADER_FLOPPY_PAGE;
return BOOT_LOADER_HARDDISK_VBR_PAGE;
}
else if (Line == 14)
{
return BOOT_LOADER_FLOPPY_PAGE;
}
else if (Line == 15)
{
return SUCCESS_PAGE;
}
@ -3615,41 +3596,72 @@ BootLoaderFloppyPage(PINPUT_RECORD Ir)
return BOOT_LOADER_FLOPPY_PAGE;
}
static PAGE_NUMBER
BootLoaderHarddiskPage(PINPUT_RECORD Ir)
BootLoaderHarddiskVbrPage(PINPUT_RECORD Ir)
{
UCHAR PartitionType;
NTSTATUS Status;
PartitionType = PartitionList->ActiveBootPartition->
PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType;
Status = InstallVBRToPartition(&SystemRootPath,
&SourceRootPath,
&DestinationArcPath,
PartitionType);
if (!NT_SUCCESS(Status))
{
MUIDisplayError(ERROR_WRITE_BOOT, Ir, POPUP_WAIT_ENTER);
return QUIT_PAGE;
}
return SUCCESS_PAGE;
}
static PAGE_NUMBER
BootLoaderHarddiskMbrPage(PINPUT_RECORD Ir)
{
UCHAR PartitionType;
NTSTATUS Status;
WCHAR DestinationDevicePathBuffer[MAX_PATH];
WCHAR SourceMbrPathBuffer[MAX_PATH];
/* Step 1: Write the VBR */
PartitionType = PartitionList->ActiveBootPartition->
PartInfo[PartitionList->ActiveBootPartitionNumber].PartitionType;
if ((PartitionType == PARTITION_FAT_12) ||
(PartitionType == PARTITION_FAT_16) ||
(PartitionType == PARTITION_HUGE) ||
(PartitionType == PARTITION_XINT13) ||
(PartitionType == PARTITION_FAT32) ||
(PartitionType == PARTITION_FAT32_XINT13))
{
Status = InstallFatBootcodeToPartition(&SystemRootPath,
&SourceRootPath,
&DestinationArcPath,
PartitionType);
if (!NT_SUCCESS(Status))
{
MUIDisplayError(ERROR_INSTALL_BOOTCODE, Ir, POPUP_WAIT_ENTER);
return QUIT_PAGE;
}
return SUCCESS_PAGE;
}
else
Status = InstallVBRToPartition(&SystemRootPath,
&SourceRootPath,
&DestinationArcPath,
PartitionType);
if (!NT_SUCCESS(Status))
{
MUIDisplayError(ERROR_WRITE_BOOT, Ir, POPUP_WAIT_ENTER);
return QUIT_PAGE;
}
return BOOT_LOADER_HARDDISK_PAGE;
/* Step 2: Write the MBR */
swprintf(DestinationDevicePathBuffer,
L"\\Device\\Harddisk%d\\Partition0",
PartitionList->ActiveBootDisk->DiskNumber);
wcscpy(SourceMbrPathBuffer, SourceRootPath.Buffer);
wcscat(SourceMbrPathBuffer, L"\\loader\\dosmbr.bin");
DPRINT("Install MBR bootcode: %S ==> %S\n",
SourceMbrPathBuffer, DestinationDevicePathBuffer);
Status = InstallMbrBootCodeToDisk(SourceMbrPathBuffer,
DestinationDevicePathBuffer);
if (!NT_SUCCESS (Status))
{
DPRINT1("InstallMbrBootCodeToDisk() failed (Status %lx)\n",
Status);
MUIDisplayError(ERROR_INSTALL_BOOTCODE, Ir, POPUP_WAIT_ENTER);
return QUIT_PAGE;
}
return SUCCESS_PAGE;
}
@ -3916,8 +3928,12 @@ RunUSetup(VOID)
Page = BootLoaderFloppyPage(&Ir);
break;
case BOOT_LOADER_HARDDISK_PAGE:
Page = BootLoaderHarddiskPage(&Ir);
case BOOT_LOADER_HARDDISK_MBR_PAGE:
Page = BootLoaderHarddiskMbrPage(&Ir);
break;
case BOOT_LOADER_HARDDISK_VBR_PAGE:
Page = BootLoaderHarddiskVbrPage(&Ir);
break;
/* Repair pages */

View file

@ -995,18 +995,24 @@ static MUI_ENTRY bgBGBootLoaderEntries[] =
{
8,
12,
"‘« £ ­¥ ­  § ΰ¥¦¤ η ­  βΆκΰ¤¨ο ¤¨α<C2A8> (Ά MBR).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"‘« £ ­¥ ­  § ΰ¥¦¤ η ­  ¤¨α<C2A8>¥β .",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"‘« £ ­¥ ­  § à¥¦¤ ç ­  ¤¨áª¥â .",
TEXT_STYLE_NORMAL
},
{
8,
15,
"„  ­¥ ᥠ᫠£  § à¥¦¤ ç.",
TEXT_STYLE_NORMAL
},

View file

@ -993,18 +993,24 @@ static MUI_ENTRY csCZBootLoaderEntries[] =
{
8,
12,
"Nainstalovat zavad؟ na disk (MBR).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Nainstalovat zavad؟ na disketu.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Nainstalovat zavad؟ na disketu.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"PýeskoŸit instalaci zavadØŸe.",
TEXT_STYLE_NORMAL
},

View file

@ -578,7 +578,7 @@ static MUI_ENTRY deDEFlushPageEntries[] =
{
10,
9,
"Der PC wird automatisch neunstarten, wenn der Vorgang beendet ist.",
"Der PC wird automatisch neustarten, wenn der Vorgang beendet ist.",
TEXT_STYLE_NORMAL
},
{
@ -986,18 +986,24 @@ static MUI_ENTRY deDEBootLoaderEntries[] =
{
8,
12,
"Boot-Loader auf der Festplatte installieren (Bootsektor).",
"Boot-Loader auf der Festplatte installieren (MBR und VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Boot-Loader auf einer Diskette installieren.",
"Boot-Loader auf der Festplatte installieren (nur VBR).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Boot-Loader auf einer Diskette installieren.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Boot-Loader nicht installieren.",
TEXT_STYLE_NORMAL
},

View file

@ -1009,18 +1009,24 @@ static MUI_ENTRY elGRBootLoaderEntries[] =
{
8,
12,
"„š¡˜«á©«˜©ž «¦¬ bootloader ©«¦ ©¡¢ž¨æ ›å©¡¦ (MBR).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"„š¡˜«á©«˜©ž «¦¬ bootloader ©œ £ ˜ › ©¡â«˜.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"„š¡˜«á©«˜©ž «¦¬ bootloader ©œ £ ˜ › ©¡â«˜.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Œ˜ £ž šå¤œ  œš¡˜«á©«˜©ž «¦¬ bootloader.",
TEXT_STYLE_NORMAL
},

View file

@ -985,18 +985,24 @@ static MUI_ENTRY enUSBootLoaderEntries[] =
{
8,
12,
"Install bootloader on the harddisk (bootsector).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Install bootloader on a floppy disk.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Install bootloader on a floppy disk.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Skip install bootloader.",
TEXT_STYLE_NORMAL
},

View file

@ -992,18 +992,24 @@ static MUI_ENTRY esESBootLoaderEntries[] =
{
8,
12,
"Instalar cargador de arranque en el disco duro (sector de boot).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Instalar cargador de inicio en un disquete.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Instalar cargador de inicio en un disquete.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Omitir la instalaci¢n del cargador de arranque.",
TEXT_STYLE_NORMAL
},

View file

@ -985,18 +985,24 @@ static MUI_ENTRY etEEBootLoaderEntries[] =
{
8,
12,
"Paigalda alglaadur kävakettale (MBR).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Paigalda alglaadur flopikettale.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Paigalda alglaadur flopikettale.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Žra paigalda alglaadurit.",
TEXT_STYLE_NORMAL
},

View file

@ -998,18 +998,24 @@ static MUI_ENTRY frFRBootLoaderEntries[] =
{
8,
12,
"Installer le chargeur de dmarrage sur le disque dur (MBR).",
"Installer le chargeur de dmarrage sur le disque (MBR et VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Installer le chargeur de dmarrage sur une disquette.",
"Installer le chargeur de dmarrage sur le disque (VBR seulement).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Installer le chargeur de dmarrage sur une disquette.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Ne pas installer le chargeur de dmarrage.",
TEXT_STYLE_NORMAL
},
@ -1090,7 +1096,7 @@ static MUI_ENTRY frFRLayoutSettingsEntries[] =
{
6,
8,
"Please select a layout to be installed by default.",
"Veuillez slectionner une disposition … installer par dfaut.",
TEXT_STYLE_NORMAL
},
{
@ -1481,18 +1487,18 @@ MUI_ERROR frFRErrorEntries[] =
},
{
//ERROR_ADDING_KBLAYOUTS,
"Setup failed to add keyboard layouts to registry.\n"
"ENTER = Reboot computer"
"Setup n'a pas pu ajouter les dispositions de clavier au registre.\n"
"ENTER = Redmarrer l'ordinateur"
},
{
//ERROR_UPDATE_GEOID,
"Setup could not set the geo id.\n"
"ENTER = Reboot computer"
"Setup n'a pas pu dfinir la geo id.\n"
"ENTER = Redmarrer l'ordinateur"
},
{
//ERROR_INSUFFICIENT_DISKSPACE,
"Not enough free space in the selected partition.\n"
" * Press any key to continue.",
"Pas assez d'espace libre dans la partition slectionne.\n"
" * Appuyez sur n'importe quelle touche pour continuer.",
NULL
},
{
@ -1709,6 +1715,6 @@ MUI_STRING frFRStrings[] =
{STRING_GB,
"Go"},
{STRING_ADDKBLAYOUTS,
"Adding keyboard layouts"},
"Ajout des dispositions clavier"},
{0, 0}
};

View file

@ -986,18 +986,24 @@ static MUI_ENTRY itITBootLoaderEntries[] =
{
8,
12,
"Installazione del bootloader sul disco fisso (settore di avvio).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Installazione del bootloader su un disco floppy.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Installazione del bootloader su un disco floppy.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Salta l'installazione del bootloader.",
TEXT_STYLE_NORMAL
},

View file

@ -986,18 +986,24 @@ static MUI_ENTRY jaJPBootLoaderEntries[] =
{
8,
12,
"ブートローダヲ ハードディスク (ブートセクタ)ニ インストール スル。",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"ブートローダヲ フロッピー ディスクニ インストール スル。",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"ÌÞ°ÄÛ°ÀÞ¦ ÌÛ¯Ëß° ÃÞ¨½¸Æ ²Ý½Ä°Ù ½Ù¡",
TEXT_STYLE_NORMAL
},
{
8,
15,
"ÌÞ°ÄÛ°ÀÞÉ ²Ý½Ä°Ù¦ ½·¯Ìß ½Ù¡",
TEXT_STYLE_NORMAL
},

View file

@ -995,18 +995,24 @@ static MUI_ENTRY ltLTBootLoaderEntries[] =
{
8,
12,
"Install bootloader on the harddisk (MBR).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Install bootloader on a floppy disk.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Install bootloader on a floppy disk.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Skip install bootloader.",
TEXT_STYLE_NORMAL
},

View file

@ -1012,18 +1012,24 @@ static MUI_ENTRY nlNLBootLoaderEntries[] =
{
8,
12,
"Installeer de bootloader op de harde schijf (bootsector).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Installeer de bootloader op een floppy disk.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Installeer de bootloader op een floppy disk.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Installeren bootloader overslaan.",
TEXT_STYLE_NORMAL
},

View file

@ -994,18 +994,24 @@ static MUI_ENTRY plPLBootLoaderEntries[] =
{
8,
12,
" Wgraj bootloader na dysk twardy (MBR).",
"Wgraj bootloader na dysk twardy (MBR i VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
" Wgraj bootloader na dyskietk©.",
"Wgraj bootloader na dysk twardy (tylko VBR).",
TEXT_STYLE_NORMAL
},
{
8,
14,
" Wgraj bootloader na dyskietk©.",
TEXT_STYLE_NORMAL
},
{
8,
15,
" Pomiä wgrywanie bootloadera.",
TEXT_STYLE_NORMAL
},

File diff suppressed because it is too large Load diff

View file

@ -986,18 +986,24 @@ static MUI_ENTRY ruRUBootLoaderEntries[] =
{
8,
12,
"αβ ­®Ά<EFBFBD>  ­  ¦¥αβ<CEB1>¨© ¤¨α<C2A8> (§ £ΰ㧮η­λ© α¥<CEB1>β®ΰ).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"αβ ­®Ά<EFBFBD>  ­  £¨΅<C2A8>¨© ¤¨α<C2A8>.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"“áâ ­®¢ª  ­  £¨¡ª¨© ¤¨áª.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"<EFBFBD>¥ ãáâ ­ ¢«¨¢ âì § £àã§ç¨ª.",
TEXT_STYLE_NORMAL
},

View file

@ -993,18 +993,24 @@ static MUI_ENTRY skSKBootLoaderEntries[] =
{
8,
12,
"Nainçtalovaś zav dzaź systmu na pevně disk (zav dzacˇ sektor).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Nainçtalovaś zav dzaź systmu na disketu.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Nainçtalovaœ zav dzaŸ systmu na disketu.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"PreskoŸiœ inçtal ciu zav dzaŸa systmu.",
TEXT_STYLE_NORMAL
},

View file

@ -986,18 +986,24 @@ static MUI_ENTRY svSEBootLoaderEntries[] =
{
8,
12,
"Install bootloader on the harddisk (MBR).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"Install bootloader on a floppy disk.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"Install bootloader on a floppy disk.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"Skip install bootloader.",
TEXT_STYLE_NORMAL
},

View file

@ -991,18 +991,24 @@ static MUI_ENTRY ukUABootLoaderEntries[] =
{
8,
12,
"‚áâ ­®¢¨â¨ bootloader ­  ¦®àá⪨© ¤¨áª (bootsector).",
"Install bootloader on the harddisk (MBR and VBR).",
TEXT_STYLE_NORMAL
},
{
8,
13,
"‚áâ ­®¢¨â¨ bootloader ­  ¤¨áª¥âã.",
"Install bootloader on the harddisk (VBR only).",
TEXT_STYLE_NORMAL
},
{
8,
14,
"‚áâ ­®¢¨â¨ bootloader ­  ¤¨áª¥âã.",
TEXT_STYLE_NORMAL
},
{
8,
15,
"<EFBFBD>¥ ¢áâ ­®¢«î¢ â¨ bootloader.",
TEXT_STYLE_NORMAL
},

View file

@ -232,7 +232,7 @@ const MUI_LANGUAGE LanguageList[] =
{L"00000814", L"1252", L"850", L"10000", L"Norwegian (Nynorsk)", L"47", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, nnNOLayouts },
{L"00000415", L"1250", L"852", L"10029", L"Polish", L"48", plPLPages, plPLErrorEntries, plPLStrings, LatinFonts, plPLLayouts },
{L"00000816", L"1252", L"850", L"10000", L"Portuguese (Portugal)", L"351", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, ptPTLayouts },
{L"00000416", L"1252", L"850", L"10000", L"Portuguese (Brazil)", L"55", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, ptBRLayouts },
{L"00000416", L"1252", L"850", L"10000", L"Portuguese (Brazil)", L"55", ptBRPages, ptBRErrorEntries, ptBRStrings, LatinFonts, ptBRLayouts },
{L"00000446", L"0", L"1", L"2", L"Punjabi (India)", L"91", enUSPages, enUSErrorEntries, enUSStrings, UnicodeFonts, paINLayouts },
{L"00000418", L"1250", L"852", L"10029", L"Romanian", L"40", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, roROLayouts },
{L"00000417", L"1252", L"850", L"10000", L"Romansh", L"41", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, rmCHLayouts },

View file

@ -701,6 +701,7 @@ AddDiskToList (HANDLE FileHandle,
ULONG i;
PLIST_ENTRY ListEntry;
PBIOSDISKENTRY BiosDiskEntry;
ULONG LayoutBufferSize;
Status = NtDeviceIoControlFile (FileHandle,
NULL,
@ -870,9 +871,15 @@ AddDiskToList (HANDLE FileHandle,
InsertAscendingList(&List->DiskListHead, DiskEntry, DISKENTRY, ListEntry, BiosDiskNumber);
/*
* Allocate a buffer for 26 logical drives (2 entries each == 52)
* plus the main partiton table (4 entries). Total 56 entries.
*/
LayoutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION) +
((56 - ANYSIZE_ARRAY) * sizeof(PARTITION_INFORMATION));
LayoutBuffer = (DRIVE_LAYOUT_INFORMATION*)RtlAllocateHeap (ProcessHeap,
0,
8192);
LayoutBufferSize);
if (LayoutBuffer == NULL)
{
return;
@ -887,7 +894,7 @@ AddDiskToList (HANDLE FileHandle,
NULL,
0,
LayoutBuffer,
8192);
LayoutBufferSize);
if (NT_SUCCESS (Status))
{
if (LayoutBuffer->PartitionCount == 0)
@ -1956,6 +1963,8 @@ CreateNewPartition (PPARTLIST List,
PartEntry->FormatState = Unformatted;
PartEntry->PartInfo[0].StartingOffset.QuadPart =
PartEntry->UnpartitionedOffset + DiskEntry->TrackSize;
PartEntry->PartInfo[0].HiddenSectors =
PartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
PartEntry->PartInfo[0].PartitionLength.QuadPart =
PartEntry->UnpartitionedLength - DiskEntry->TrackSize;
PartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED;
@ -1985,6 +1994,8 @@ CreateNewPartition (PPARTLIST List,
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
PrevPartEntry->PartInfo[1].HiddenSectors =
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{
@ -2011,6 +2022,8 @@ CreateNewPartition (PPARTLIST List,
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
PartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
PrevPartEntry->PartInfo[1].HiddenSectors =
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{
@ -2066,6 +2079,8 @@ CreateNewPartition (PPARTLIST List,
NewPartEntry->FormatState = Unformatted;
NewPartEntry->PartInfo[0].StartingOffset.QuadPart =
PartEntry->UnpartitionedOffset + DiskEntry->TrackSize;
NewPartEntry->PartInfo[0].HiddenSectors =
NewPartEntry->PartInfo[0].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
NewPartEntry->PartInfo[0].PartitionLength.QuadPart =
PartitionSize - DiskEntry->TrackSize;
NewPartEntry->PartInfo[0].PartitionType = PARTITION_ENTRY_UNUSED;
@ -2095,6 +2110,8 @@ CreateNewPartition (PPARTLIST List,
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
PrevPartEntry->PartInfo[1].HiddenSectors =
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{
@ -2121,6 +2138,8 @@ CreateNewPartition (PPARTLIST List,
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart =
NewPartEntry->PartInfo[0].StartingOffset.QuadPart - DiskEntry->TrackSize;
PrevPartEntry->PartInfo[1].HiddenSectors =
PrevPartEntry->PartInfo[1].StartingOffset.QuadPart / DiskEntry->BytesPerSector;
if (DiskEntry->PartListHead.Flink == &PrevPartEntry->ListEntry)
{

View file

@ -50,6 +50,7 @@
/* Internal Headers */
#include "interface/consup.h"
#include "partlist.h"
#include "infros.h"
#include "inffile.h"
#include "inicache.h"
#include "progress.h"
@ -107,7 +108,8 @@ typedef enum _PAGE_NUMBER
REGISTRY_PAGE,
BOOT_LOADER_PAGE,
BOOT_LOADER_FLOPPY_PAGE,
BOOT_LOADER_HARDDISK_PAGE,
BOOT_LOADER_HARDDISK_MBR_PAGE,
BOOT_LOADER_HARDDISK_VBR_PAGE,
REPAIR_INTRO_PAGE,

View file

@ -145,7 +145,7 @@ BEGIN
CONTROL "&Êîìàíäà:",-1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,3,
18,60,10
EDITTEXT 201,3,29,134,12,ES_AUTOHSCROLL
CONTROL "As &Symbol",214,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,
CONTROL "&Як Символ",214,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,
45,71,12
DEFPUSHBUTTON "&OK",1,158,6,47,14
PUSHBUTTON "&Ñêàñóâàòè",2,158,23,47,14
@ -169,7 +169,7 @@ END
IDD_DESKBAR_DESKTOP DIALOGEX DISCARDABLE 0, 0, 212, 194
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Властивості робочого стола"
CAPTION "Властивості робочого столу"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Îáåð³òü íàéá³ëüø çðó÷íèé äëÿ âàñ àëãîðèòì âèð³âíþâàííÿ çíà÷ê³â:",
@ -268,11 +268,11 @@ BEGIN
BS_AUTORADIOBUTTON,7,62,118,10
CONTROL 170,IDC_STATIC,"Static",SS_BITMAP,145,23,15,13
CONTROL 171,IDC_STATIC,"Static",SS_BITMAP,145,57,15,13
CONTROL "Відкривати підпапки в о&кремих вікнах",
CONTROL "Відкривати підтеки в о&кремих вікнах",
IDC_SEPARATE_SUBFOLDERS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,90,135,10
LTEXT "Ці настройки будуть використані як значення за замовчуванням для всіх вікон провідника в майбутньому.",
IDC_STATIC,7,111,174,22
LTEXT "Ці параметри будуть використані як значення за замовчуванням для всіх вікон провідника в майбутньому.",
IDC_STATIC,7,109,174,24
DEFPUSHBUTTON "&OK",IDOK,29,136,50,14,WS_GROUP
PUSHBUTTON "&Ñêàñóâàòè",IDCANCEL,106,136,50,14
END

View file

@ -39,9 +39,7 @@
#include <windowsx.h> // for SelectBrush(), ListBox_SetSel(), SubclassWindow(), ...
#include <commctrl.h>
#ifndef _MSC_VER
#include <objbase.h>
#endif
#include <oleauto.h> // for VARIANT
#include <malloc.h> // for alloca()

View file

@ -80,6 +80,42 @@ ScmCreateStartEvent(PHANDLE StartEvent)
}
static VOID
ScmWaitForLsass(VOID)
{
HANDLE hEvent;
DWORD dwError;
hEvent = CreateEventW(NULL,
TRUE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
dwError = GetLastError();
DPRINT("Failed to create the notication event (Error %lu)\n", dwError);
if (dwError == ERROR_ALREADY_EXISTS)
{
hEvent = OpenEventW(SYNCHRONIZE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
DPRINT1("Could not open the notification event (Error %lu)\n", GetLastError());
return;
}
}
}
DPRINT("Wait for the LSA server!\n");
WaitForSingleObject(hEvent, INFINITE);
DPRINT("LSA server running!\n");
CloseHandle(hEvent);
}
BOOL
ScmNamedPipeHandleRequest(PVOID Request,
DWORD RequestSize,
@ -304,9 +340,6 @@ wWinMain(HINSTANCE hInstance,
DPRINT("SERVICES: Service Control Manager\n");
/* Acquire privileges to load drivers */
AcquireLoadDriverPrivilege();
/* Create start event */
if (!ScmCreateStartEvent(&hScmStartEvent))
{
@ -346,6 +379,12 @@ wWinMain(HINSTANCE hInstance,
/* Register event handler (used for system shutdown) */
SetConsoleCtrlHandler(ShutdownHandlerRoutine, TRUE);
/* Wait for the LSA server */
ScmWaitForLsass();
/* Acquire privileges to load drivers */
AcquireLoadDriverPrivilege();
/* Start auto-start services */
ScmAutoStartServices();

View file

@ -167,7 +167,7 @@ StartLsass(VOID)
LPCWSTR ServiceString = L"lsass.exe";
BOOL res;
/* Start the service control manager (services.exe) */
/* Start the local security authority subsystem (lsass.exe) */
ZeroMemory(&StartupInfo, sizeof(STARTUPINFOW));
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.lpReserved = NULL;
@ -199,6 +199,43 @@ StartLsass(VOID)
return res;
}
static VOID
WaitForLsass(VOID)
{
HANDLE hEvent;
DWORD dwError;
hEvent = CreateEventW(NULL,
TRUE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
dwError = GetLastError();
TRACE("WL: Failed to create the notication event (Error %lu)\n", dwError);
if (dwError == ERROR_ALREADY_EXISTS)
{
hEvent = OpenEventW(SYNCHRONIZE,
FALSE,
L"LSA_RPC_SERVER_ACTIVE");
if (hEvent == NULL)
{
ERR("WL: Could not open the notification event (Error %lu)\n", GetLastError());
return;
}
}
}
TRACE("WL: Wait for the LSA server!\n");
WaitForSingleObject(hEvent, INFINITE);
TRACE("WL: LSA server running!\n");
CloseHandle(hEvent);
}
BOOL
DisplayStatusMessage(
IN PWLSESSION Session,
@ -348,6 +385,10 @@ WinMain(
DisplayStatusMessage(WLSession, WLSession->WinlogonDesktop, IDS_REACTOSISSTARTINGUP);
/* Wait for the LSA server */
WaitForLsass();
#if 0
/* Connect to NetLogon service (lsass.exe) */
/* Real winlogon uses "Winlogon" */
@ -415,7 +456,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))

View file

@ -81,6 +81,7 @@ list(APPEND FREELDR_BASE_SOURCE
freeldr/freeldr/video/palette.c
freeldr/freeldr/video/video.c
freeldr/freeldr/windows/conversion.c
freeldr/freeldr/windows/headless.c
freeldr/freeldr/windows/peloader.c
freeldr/freeldr/windows/winldr.c
freeldr/freeldr/windows/wlmemory.c
@ -176,6 +177,7 @@ target_link_libraries(freeldr mini_hal)
endif(ARCH MATCHES i386)
target_link_libraries(freeldr
cportlib
rossym
cmlib
rtl
@ -198,6 +200,7 @@ target_link_libraries(setupldr mini_hal)
endif(ARCH MATCHES i386)
target_link_libraries(setupldr
cportlib
rossym
cmlib
rtl

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