sync to trunk head (37079)

svn path=/branches/ros-amd64-bringup/; revision=37088
This commit is contained in:
Timo Kreuzer
2008-10-30 09:59:28 +00:00
76 changed files with 7043 additions and 4994 deletions
+27 -4
View File
@@ -145,7 +145,7 @@ GetServices ( void )
if (hService != INVALID_HANDLE_VALUE)
{
/* check if service is required by the system*/
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, (LPBYTE)pServiceFailureActions, 0, &BytesNeeded))
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, (LPBYTE)NULL, 0, &BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
@@ -156,11 +156,17 @@ GetServices ( void )
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, (LPBYTE)pServiceFailureActions, BytesNeeded, &BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceFailureActions);
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
}
else /* exit on failure */
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
}
@@ -183,22 +189,32 @@ GetServices ( void )
/* get vendor of service binary */
BytesNeeded = 0;
if (!QueryServiceConfig(hService, pServiceConfig, 0, &BytesNeeded))
if (!QueryServiceConfig(hService, NULL, 0, &BytesNeeded))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
pServiceConfig = (LPQUERY_SERVICE_CONFIG) HeapAlloc(GetProcessHeap(), 0, BytesNeeded);
if (pServiceConfig == NULL)
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
if (!QueryServiceConfig(hService, pServiceConfig, BytesNeeded, &BytesNeeded))
{
HeapFree(GetProcessHeap(), 0, pServiceConfig);
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
}
else /* exit on failure */
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
}
@@ -221,11 +237,18 @@ GetServices ( void )
{
lpData = (TCHAR*) HeapAlloc(GetProcessHeap(), 0, dwLen);
if (lpData == NULL)
{
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
if (!GetFileVersionInfo (FileName, dwHandle, dwLen, lpData))
{
HeapFree(GetProcessHeap(), 0, lpData);
HeapFree(GetProcessHeap(), 0, pServiceStatus);
CloseServiceHandle(hService);
CloseServiceHandle(ScHandle);
return;
}
@@ -296,6 +296,10 @@ BOOL GetEventMessage(
// Allocate space for parameters
szArguments = (LPTSTR*)malloc(sizeof(LPVOID)* pevlr->NumStrings);
if (!szArguments)
{
return FALSE;
}
for (i = 0; i < pevlr->NumStrings ; i++)
{
@@ -372,6 +376,8 @@ BOOL GetEventMessage(
wsprintf (EventText, szStringIDNotFound , (DWORD)(pevlr->EventID & 0xFFFF) , SourceName );
}
free(szArguments);
// No more dlls to try , return result
return bDone;
}
@@ -122,7 +122,7 @@ main(int argc, char **argv)
static void
userlist(int argc, char **argv)
{
int *used;
int *used = NULL;
char **ap, **nargv, **np, **p;
WORD wVersionRequested;
WSADATA wsaData;
@@ -166,6 +166,8 @@ userlist(int argc, char **argv)
/* Bring down winsock */
WSACleanup();
free(nargv);
free(used);
exit(0);
}
@@ -454,7 +454,10 @@ VOID ShowInfo(BOOL bAll)
_tprintf(_T("\tIP Address. . . . . . . . . . . . : %s\n"), pAdapter->IpAddressList.IpAddress.String);
_tprintf(_T("\tSubnet Mask . . . . . . . . . . . : %s\n"), pAdapter->IpAddressList.IpMask.String);
_tprintf(_T("\tDefault Gateway . . . . . . . . . : %s\n"), pAdapter->GatewayList.IpAddress.String);
if (pAdapter->GatewayList.IpAddress.String[0] != '0')
_tprintf(_T("\tDefault Gateway . . . . . . . . . : %s\n"), pAdapter->GatewayList.IpAddress.String);
else
_tprintf(_T("\tDefault Gateway . . . . . . . . . :\n"));
if (bAll)
{
+1 -1
View File
@@ -525,7 +525,7 @@ void setup_adapter( PDHCP_ADAPTER Adapter, struct client_lease *new_lease ) {
&Adapter->NteContext,
&Adapter->NteInstance );
if (hkey) {
RegSetValueExA(hkey, "DhcpIPAddress", 0, REG_SZ, (LPBYTE)new_lease->address.iabuf, strlen(new_lease->address.iabuf)+1);
RegSetValueExA(hkey, "DhcpIPAddress", 0, REG_SZ, (LPBYTE)piaddr(new_lease->address), strlen(piaddr(new_lease->address))+1);
Buffer[0] = '\0';
for(i = 0; i < new_lease->options[DHO_SUBNET_MASK].len; i++)
{
@@ -699,6 +699,15 @@ ITrayWindowImpl_RegLoadSettings(IN OUT ITrayWindowImpl *This)
/* FIXME: Are there more flags? */
if (This->hWnd != NULL)
SetWindowPos (This->hWnd,
This->AlwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
0,
0,
0,
0,
SWP_NOMOVE | SWP_NOSIZE);
if (sr.Position > ABE_BOTTOM)
This->Position = ABE_BOTTOM;
else
+1
View File
@@ -2,6 +2,7 @@
#define _SMSS_H_INCLUDED_
#include <stdio.h>
#include <stdlib.h>
#define WIN32_NO_STATUS
#include <windows.h>
#define NTOS_MODE_USER
+10 -19
View File
@@ -1367,7 +1367,7 @@ DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen)
if (!resInfo)
return ERROR_OUTOFMEMORY;
size = sizeof(FIXED_INFO) + (resInfo->riCount > 0 ? (resInfo->riCount - 1) *
size = sizeof(FIXED_INFO) + (resInfo->riCount > 1 ? (resInfo->riCount-1) *
sizeof(IP_ADDR_STRING) : 0);
if (!pFixedInfo || *pOutBufLen < size) {
*pOutBufLen = size;
@@ -1383,25 +1383,16 @@ DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen)
TRACE("GetComputerNameExA: %s\n", pFixedInfo->DomainName);
if (resInfo->riCount > 0) {
PIP_ADDR_STRING ptr;
int i;
for (i = 0, ptr = &pFixedInfo->DnsServerList; i < resInfo->riCount && ptr;
i++, ptr = ptr->Next) {
struct sockaddr_in *addr_v4 =
(struct sockaddr_in *)&resInfo->riAddressList[i];
toIPAddressString
(addr_v4->sin_addr.s_addr,
ptr->IpAddress.String);
if (i == resInfo->riCount - 1)
ptr->Next = NULL;
else if (i == 0)
ptr->Next = (PIP_ADDR_STRING)((LPBYTE)pFixedInfo + sizeof(FIXED_INFO));
else
ptr->Next = (PIP_ADDR_STRING)((PBYTE)ptr + sizeof(IP_ADDR_STRING));
if (resInfo->riCount > 0)
{
CopyMemory(&pFixedInfo->DnsServerList, resInfo->DnsList, sizeof(IP_ADDR_STRING));
if (resInfo->riCount > 1)
{
pFixedInfo->DnsServerList.Next = (struct _IP_ADDR_STRING*)((char*)pFixedInfo + sizeof(FIXED_INFO));
CopyMemory(pFixedInfo->DnsServerList.Next, resInfo->DnsList->Next, sizeof(IP_ADDR_STRING) * (resInfo->riCount-1));
}
}
pFixedInfo->NodeType = HYBRID_NODETYPE;
regReturn = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\VxD\\MSTCP", 0, KEY_READ, &hKey);
@@ -1490,7 +1481,7 @@ static void CreateNameServerListEnumNamesFunc( PWCHAR Interface, PWCHAR Server,
Context->uSizeRequired += sizeof(IP_ADDR_STRING);
if (Context->uSizeAvailable >= Context->uSizeRequired)
{
pNext = ((char*)Context->pLastAddr) + sizeof(IP_ADDR_STRING);
pNext = (IP_ADDR_STRING*)(((char*)Context->pLastAddr) + sizeof(IP_ADDR_STRING));
WideCharToMultiByte(CP_ACP, 0, Server, -1, pNext->IpAddress.String, 16, NULL, NULL);
pNext->IpAddress.String[15] = '\0';
Context->pLastAddr->Next = pNext;
+1
View File
@@ -23,6 +23,7 @@
typedef struct _IPHLP_RES_INFO {
DWORD riCount;
IP_ADDR_STRING * DnsList;
struct sockaddr_in *riAddressList;
} IPHLP_RES_INFO, *PIPHLP_RES_INFO;
+34 -48
View File
@@ -49,8 +49,7 @@
typedef struct _NAME_SERVER_LIST_PRIVATE {
UINT NumServers;
UINT CurrentName;
PIP_ADDRESS_STRING AddrString;
IP_ADDR_STRING * pCurrent;
} NAME_SERVER_LIST_PRIVATE, *PNAME_SERVER_LIST_PRIVATE;
NTSYSAPI
@@ -177,22 +176,23 @@ static void CreateNameServerListEnumIfFuncCount( HKEY RegHandle,
CreateNameServerListEnumNamesFuncCount);
}
VOID CreateNameServerListEnumNamesFunc( PWCHAR Interface,
PWCHAR Server,
PVOID _Data ) {
VOID CreateNameServerListEnumNamesFunc(
PWCHAR Interface,
PWCHAR Server,
PVOID _Data )
{
PNAME_SERVER_LIST_PRIVATE Data = (PNAME_SERVER_LIST_PRIVATE)_Data;
if (WideCharToMultiByte(CP_ACP, 0, Server, -1,
Data->AddrString[Data->CurrentName].String,
16, NULL, NULL))
{
Data->AddrString[Data->CurrentName].String[15] = '\0';
Data->CurrentName++;
}
else
{
Data->AddrString[Data->CurrentName].String[0] = '\0';
}
if (WideCharToMultiByte(CP_ACP, 0, Server, -1, Data->pCurrent->IpAddress.String, 16, NULL, NULL))
{
Data->pCurrent->Next = (struct _IP_ADDR_STRING*)(char*)Data->pCurrent + sizeof(IP_ADDR_STRING);
Data->pCurrent = Data->pCurrent->Next;
Data->NumServers++;
}
else
{
Data->pCurrent->IpAddress.String[0] = '\0';
}
}
static void CreateNameServerListEnumIfFunc( HKEY RegHandle,
@@ -213,51 +213,37 @@ static void MakeNameServerList( PNAME_SERVER_LIST_PRIVATE PrivateData ) {
}
PIPHLP_RES_INFO getResInfo() {
DWORD i, ServerCount;
NAME_SERVER_LIST_PRIVATE PrivateNSEnum = { 0 };
DWORD ServerCount;
NAME_SERVER_LIST_PRIVATE PrivateNSEnum;
PIPHLP_RES_INFO ResInfo;
struct sockaddr_in *AddrList;
IP_ADDR_STRING * DnsList;
PrivateNSEnum.NumServers = 0;
ServerCount = CountNameServers( &PrivateNSEnum );
PrivateNSEnum.NumServers = ServerCount;
PrivateNSEnum.AddrString =
(PIP_ADDRESS_STRING)
RtlAllocateHeap( GetProcessHeap(), 0,
ServerCount * sizeof(IP_ADDRESS_STRING) );
PrivateNSEnum.CurrentName = 0;
DnsList = HeapAlloc(GetProcessHeap(), 0, ServerCount * sizeof(IP_ADDR_STRING));
ZeroMemory(DnsList, ServerCount * sizeof(IP_ADDR_STRING));
ResInfo =
(PIPHLP_RES_INFO)RtlAllocateHeap
( GetProcessHeap(), 0,
sizeof(IPHLP_RES_INFO) +
(ServerCount * sizeof(struct sockaddr_in)) );
if( !ResInfo ) {
RtlFreeHeap( GetProcessHeap(), 0, PrivateNSEnum.AddrString );
return NULL;
ResInfo = (PIPHLP_RES_INFO)RtlAllocateHeap ( GetProcessHeap(), 0, sizeof(IPHLP_RES_INFO));
if( !ResInfo )
{
HeapFree( GetProcessHeap(), 0, DnsList );
return NULL;
}
ResInfo->riCount = ServerCount;
AddrList = (struct sockaddr_in *)
(((PCHAR)ResInfo) + sizeof(IPHLP_RES_INFO));
ResInfo->riAddressList = AddrList;
PrivateNSEnum.NumServers = 0;
PrivateNSEnum.pCurrent = DnsList;
MakeNameServerList( &PrivateNSEnum );
for( i = 0; i < PrivateNSEnum.CurrentName; i++ ) {
/* Hmm seems that dns servers are always AF_INET but ... */
ResInfo->riAddressList[i].sin_family = AF_INET;
ResInfo->riAddressList[i].sin_addr.s_addr =
inet_addr(PrivateNSEnum.AddrString[i].String );
ResInfo->riAddressList[i].sin_port = 0;
}
RtlFreeHeap( GetProcessHeap(), 0, PrivateNSEnum.AddrString );
ResInfo->DnsList = DnsList;
ResInfo->riCount = PrivateNSEnum.NumServers;
return ResInfo;
}
VOID disposeResInfo( PIPHLP_RES_INFO InfoPtr ) {
VOID disposeResInfo( PIPHLP_RES_INFO InfoPtr )
{
RtlFreeHeap( GetProcessHeap(), 0, InfoPtr );
HeapFree(GetProcessHeap(), 0, InfoPtr->DnsList);
}
+5 -15
View File
@@ -7,7 +7,6 @@ typedef struct
LONG ref;
NetCfgComponentItem * pItem;
INetCfgComponentPropertyUi * pProperty;
INetCfgComponentControl * pNCCC;
INetCfg * pNCfg;
}INetCfgComponentImpl;
@@ -20,8 +19,6 @@ typedef struct
INetCfg * pNCfg;
}IEnumNetCfgComponentImpl;
HRESULT
STDCALL
INetCfgComponent_fnQueryInterface(
@@ -43,7 +40,6 @@ INetCfgComponent_fnQueryInterface(
return E_NOINTERFACE;
}
ULONG
STDCALL
INetCfgComponent_fnAddRef(
@@ -420,7 +416,7 @@ CreateNotificationObject(
return hr;
}
This->pProperty = pNCCPU;
This->pNCCC = pNCCC;
This->pItem->pNCCC = pNCCC;
return S_OK;
}
@@ -467,20 +463,14 @@ INetCfgComponent_fnRaisePropertyUi(
pinfo.pszCaption = This->pItem->szDisplayName;
iResult = PropertySheetW(&pinfo);
CoTaskMemFree(hppages);
if (iResult < 0)
if (iResult > 0)
{
//FIXME
INetCfgComponentControl_CancelChanges(This->pNCCC);
return E_ABORT;
}
else
{
//FIXME
INetCfgComponentControl_ApplyRegistryChanges(This->pNCCC);
/* indicate that settings should be stored */
This->pItem->bChanged = TRUE;
return S_OK;
}
return S_FALSE;
}
static const INetCfgComponentVtbl vt_NetCfgComponent =
{
+60 -2
View File
@@ -533,6 +533,56 @@ INetCfg_fnInitialize(
return S_OK;
}
VOID
ApplyOrCancelChanges(
NetCfgComponentItem *pHead,
const CLSID * lpClassGUID,
BOOL bApply)
{
HKEY hKey;
WCHAR szName[200];
LPOLESTR pszGuid;
while(pHead)
{
if (pHead->bChanged)
{
if (IsEqualGUID(lpClassGUID, &GUID_DEVCLASS_NET))
{
if (bApply)
{
if (StringFromCLSID(&pHead->InstanceId, &pszGuid) == NOERROR)
{
swprintf(szName, L"SYSTEM\\CurrentControlSet\\Control\\Network\\%s", pszGuid);
CoTaskMemFree(pszGuid);
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szName, 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)pHead->szDisplayName, (wcslen(pHead->szDisplayName)+1) * sizeof(WCHAR));
RegCloseKey(hKey);
}
}
}
}
else if (pHead->pNCCC)
{
if (bApply)
{
INetCfgComponentControl_ApplyRegistryChanges(pHead->pNCCC);
//FIXME
// implement INetCfgPnpReconfigCallback and pass it to
//INetCfgComponentControl_ApplyPnpChanges(pHead->pNCCC, NULL);
}
else
{
INetCfgComponentControl_CancelChanges(pHead->pNCCC);
}
}
}
pHead = pHead->pNext;
}
}
HRESULT
STDCALL
INetCfg_fnUninitialize(
@@ -557,8 +607,12 @@ INetCfg_fnApply(
if (!This->bInitialized)
return NETCFG_E_NOT_INITIALIZED;
ApplyOrCancelChanges(This->pNet, &GUID_DEVCLASS_NET, TRUE);
ApplyOrCancelChanges(This->pClient, &GUID_DEVCLASS_NETCLIENT, TRUE);
ApplyOrCancelChanges(This->pService, &GUID_DEVCLASS_NETSERVICE, TRUE);
ApplyOrCancelChanges(This->pProtocol, &GUID_DEVCLASS_NETTRANS, TRUE);
return E_NOTIMPL;
return S_OK;
}
HRESULT
@@ -571,7 +625,11 @@ INetCfg_fnCancel(
if (!This->bInitialized)
return NETCFG_E_NOT_INITIALIZED;
return E_NOTIMPL;
ApplyOrCancelChanges(This->pClient, &GUID_DEVCLASS_NETCLIENT, FALSE);
ApplyOrCancelChanges(This->pService, &GUID_DEVCLASS_NETSERVICE, FALSE);
ApplyOrCancelChanges(This->pProtocol, &GUID_DEVCLASS_NETTRANS, FALSE);
return S_OK;
}
HRESULT
+1
View File
@@ -14,6 +14,7 @@
<library>ole32</library>
<library>user32</library>
<library>comctl32</library>
<library>ws2_32</library>
<file>netcfgx.c</file>
<file>netcfgx.spec</file>
<file>classfactory.c</file>
+1
View File
@@ -34,6 +34,7 @@ typedef struct tagNetCfgComponentItem
ULONG Status; //Y
BOOL bChanged; //Y
struct tagNetCfgComponentItem * pNext;
INetCfgComponentControl * pNCCC;
}NetCfgComponentItem;
/* netcfg_iface.c */
+154 -60
View File
@@ -34,6 +34,7 @@ typedef struct tagIP_ADDR
DWORD Subnetmask;
USHORT Metric;
}u;
ULONG NTEContext;
struct tagIP_ADDR * Next;
}IP_ADDR;
@@ -115,6 +116,7 @@ INT GetSelectedItem(HWND hDlgCtrl);
HRESULT InitializeTcpipBasicDlgCtrls(HWND hwndDlg, TcpipSettings * pCurSettings);
VOID InsertColumnToListView(HWND hDlgCtrl, UINT ResId, UINT SubItem, UINT Size);
INT_PTR StoreTcpipBasicSettings(HWND hwndDlg, TcpipConfNotifyImpl * This, BOOL bApply);
HRESULT Initialize(TcpipConfNotifyImpl * This);
VOID
DisplayError(UINT ResTxt, UINT ResTitle, UINT Type)
@@ -2172,6 +2174,15 @@ StoreTcpipBasicSettings(
/* store default gateway */
This->pCurrentConfig->Gw->IpAddress = dwIpAddr;
}
else
{
if (This->pCurrentConfig->Gw)
{
IP_ADDR * pNextGw = This->pCurrentConfig->Gw->Next;
CoTaskMemFree(This->pCurrentConfig->Gw);
This->pCurrentConfig->Gw = pNextGw;
}
}
}
else
{
@@ -2302,7 +2313,7 @@ InitializeTcpipBasicDlgCtrls(
/* set current hostmask */
SendDlgItemMessageA(hwndDlg, IDC_SUBNETMASK, IPM_SETADDRESS, 0, (LPARAM)pCurSettings->Ip->u.Subnetmask);
}
if (pCurSettings->Gw->IpAddress)
if (pCurSettings->Gw && pCurSettings->Gw->IpAddress)
{
/* set current gateway */
SendDlgItemMessageA(hwndDlg, IDC_DEFGATEWAY, IPM_SETADDRESS, 0, (LPARAM)pCurSettings->Gw->IpAddress);
@@ -2373,6 +2384,7 @@ CopyIpAddrString(
if (Type == SUBMASK)
{
pNew->u.Subnetmask = GetIpAddressFromStringA(pCurrent->IpMask.String);
pNew->NTEContext = pCurrent->Context;
}
else if (Type == METRIC)
{
@@ -2632,6 +2644,7 @@ LoadDNSSettings(
HKEY hKey;
DWORD dwSize;
This->pCurrentConfig->pDNS = (TcpipAdvancedDNSDlgSettings*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings));
if (!This->pCurrentConfig->pDNS)
return E_FAIL;
@@ -2748,7 +2761,7 @@ LoadFilterSettings(
HRESULT
InitializeTcpipBasicDlg(TcpipConfNotifyImpl * This)
Initialize(TcpipConfNotifyImpl * This)
{
DWORD dwSize;
WCHAR szBuffer[50];
@@ -2876,7 +2889,7 @@ INetCfgComponentPropertyUi_fnMergePropPages(
HRESULT hr;
TcpipConfNotifyImpl * This = (TcpipConfNotifyImpl*)iface;
hr = InitializeTcpipBasicDlg(This);
hr = Initialize(This);
if (FAILED(hr))
return hr;
@@ -3092,24 +3105,37 @@ INetCfgComponentControl_fnApplyRegistryChanges(
LPOLESTR pStr;
DWORD dwSize;
WCHAR szBuffer[200];
TcpipSettings * pCurrentConfig, *pOldConfig;
ULONG NTEInstance;
TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
pCurrentConfig = This->pCurrentConfig;
This->pCurrentConfig = NULL;
if (FAILED(Initialize(This)))
{
This->pCurrentConfig = pCurrentConfig;
return E_FAIL;
}
pOldConfig = This->pCurrentConfig;
This->pCurrentConfig = pCurrentConfig;
//MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
if (RegCreateKeyExW(hKey, L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
{
if (This->pCurrentConfig->pDNS)
if (pCurrentConfig->pDNS)
{
RegSetValueExW(hKey, L"UseDomainNameDevolution", 0, REG_DWORD, (LPBYTE)&This->pCurrentConfig->pDNS->UseDomainNameDevolution, sizeof(DWORD));
RegSetValueExW(hKey, L"SearchList", 0, REG_SZ, (LPBYTE)This->pCurrentConfig->pDNS->szSearchList,
(wcslen(This->pCurrentConfig->pDNS->szSearchList)+1) * sizeof(WCHAR));
RegSetValueExW(hKey, L"UseDomainNameDevolution", 0, REG_DWORD, (LPBYTE)&pCurrentConfig->pDNS->UseDomainNameDevolution, sizeof(DWORD));
RegSetValueExW(hKey, L"SearchList", 0, REG_SZ, (LPBYTE)pCurrentConfig->pDNS->szSearchList,
(wcslen(pCurrentConfig->pDNS->szSearchList)+1) * sizeof(WCHAR));
}
if (This->pCurrentConfig->pFilter)
if (pCurrentConfig->pFilter)
{
RegSetValueExW(hKey, L"EnableSecurityFilters", 0, REG_DWORD,
(LPBYTE)&This->pCurrentConfig->pFilter->EnableSecurityFilters, sizeof(DWORD));
(LPBYTE)&pCurrentConfig->pFilter->EnableSecurityFilters, sizeof(DWORD));
}
RegCloseKey(hKey);
}
@@ -3122,86 +3148,154 @@ INetCfgComponentControl_fnApplyRegistryChanges(
if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, szBuffer, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) == ERROR_SUCCESS)
{
if (This->pCurrentConfig->pDNS)
if (pCurrentConfig->pDNS)
{
RegSetValueExW(hKey, L"RegisterAdapterName", 0, REG_DWORD, (LPBYTE)&This->pCurrentConfig->pDNS->RegisterAdapterName, sizeof(DWORD));
RegSetValueExW(hKey, L"RegistrationEnabled", 0, REG_DWORD, (LPBYTE)&This->pCurrentConfig->pDNS->RegistrationEnabled, sizeof(DWORD));
RegSetValueExW(hKey, L"Domain", 0, REG_SZ, (LPBYTE)This->pCurrentConfig->pDNS->szDomain,
(wcslen(This->pCurrentConfig->pDNS->szDomain)+1) * sizeof(WCHAR));
}
if (This->pCurrentConfig->pFilter)
#if 0
if (pCurrentConfig->pFilter)
{
RegSetValueExW(hKey, L"TCPAllowedPorts", 0, REG_MULTI_SZ,
(LPBYTE)This->pCurrentConfig->pFilter->szTCPAllowedPorts,
This->pCurrentConfig->pFilter->TCPSize);
RegSetValueExW(hKey, L"UDPAllowedPorts", 0, REG_MULTI_SZ,
(LPBYTE)This->pCurrentConfig->pFilter->szUDPAllowedPorts,
This->pCurrentConfig->pFilter->UDPSize);
RegSetValueExW(hKey, L"RawIPAllowedProtocols", 0, REG_MULTI_SZ,
(LPBYTE)This->pCurrentConfig->pFilter->szRawIPAllowedProtocols,
This->pCurrentConfig->pFilter->IPSize);
if (pCurrentConfig->pFilter->szTCPAllowedPorts)
{
RegSetValueExW(hKey, L"TCPAllowedPorts", 0, REG_MULTI_SZ,
(LPBYTE)pCurrentConfig->pFilter->szTCPAllowedPorts,
pCurrentConfig->pFilter->TCPSize);
}
if (pCurrentConfig->pFilter->szUDPAllowedPorts)
{
RegSetValueExW(hKey, L"UDPAllowedPorts", 0, REG_MULTI_SZ,
(LPBYTE)pCurrentConfig->pFilter->szUDPAllowedPorts,
pCurrentConfig->pFilter->UDPSize);
}
if (pCurrentConfig->pFilter->szRawIPAllowedProtocols)
{
RegSetValueExW(hKey, L"RawIPAllowedProtocols", 0, REG_MULTI_SZ,
(LPBYTE)pCurrentConfig->pFilter->szRawIPAllowedProtocols,
pCurrentConfig->pFilter->IPSize);
}
}
RegSetValueExW(hKey, L"EnableDHCP", 0, REG_DWORD, (LPBYTE)&This->pCurrentConfig->DhcpEnabled, sizeof(DWORD));
if (This->pCurrentConfig->DhcpEnabled)
#endif
RegSetValueExW(hKey, L"EnableDHCP", 0, REG_DWORD, (LPBYTE)&pCurrentConfig->DhcpEnabled, sizeof(DWORD));
if (pCurrentConfig->DhcpEnabled)
{
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)L"0.0.0.0\0", 9 * sizeof(WCHAR));
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)L"0.0.0.0\0", 9 * sizeof(WCHAR));
RegSetValueExW(hKey, L"DefaultGateway", 0, REG_MULTI_SZ, (LPBYTE)L"\0", 2 * sizeof(WCHAR));
RegSetValueExW(hKey, L"DefaultGatewayMetric", 0, REG_MULTI_SZ, (LPBYTE)L"\0", 2 * sizeof(WCHAR));
if (!pOldConfig->DhcpEnabled)
{
DeleteIPAddress(pOldConfig->Ip->NTEContext);
//FIXME
// start dhcp client service for the adapter
}
}
else
{
pStr = CreateMultiSzString(This->pCurrentConfig->Ip, IPADDR, &dwSize, FALSE);
if(pStr)
if (!pOldConfig->DhcpEnabled)
{
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
DeleteIPAddress(pOldConfig->Ip->NTEContext);
//TODO
//delete multiple ip addresses when required
}
pStr = CreateMultiSzString(This->pCurrentConfig->Ip, SUBMASK, &dwSize, FALSE);
if(pStr)
//TODO
// add multiple ip addresses when required
if (AddIPAddress(htonl(pCurrentConfig->Ip->IpAddress), htonl(pCurrentConfig->Ip->u.Subnetmask), pCurrentConfig->Index, &pCurrentConfig->Ip->NTEContext, &NTEInstance) == NO_ERROR)
{
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
pStr = CreateMultiSzString(pCurrentConfig->Ip, IPADDR, &dwSize, FALSE);
if(pStr)
{
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
}
pStr = CreateMultiSzString(pCurrentConfig->Ip, SUBMASK, &dwSize, FALSE);
if(pStr)
{
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
}
}
pStr = CreateMultiSzString(This->pCurrentConfig->Gw, IPADDR, &dwSize, FALSE);
if(pStr)
if (pOldConfig->Gw)
{
RegSetValueExW(hKey, L"DefaultGateway", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
dwSize = 0;
if (GetIpForwardTable(NULL, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
{
DWORD Index;
PMIB_IPFORWARDTABLE pIpForwardTable = (PMIB_IPFORWARDTABLE)CoTaskMemAlloc(dwSize);
if (pIpForwardTable)
{
if (GetIpForwardTable(pIpForwardTable, &dwSize, FALSE) == NO_ERROR)
{
for (Index = 0; Index < pIpForwardTable->dwNumEntries; Index++)
{
if (pIpForwardTable->table[Index].dwForwardIfIndex == pOldConfig->Index)
{
DeleteIpForwardEntry(&pIpForwardTable->table[Index]);
}
}
}
CoTaskMemFree(pIpForwardTable);
}
}
}
pStr = CreateMultiSzString(This->pCurrentConfig->Gw, METRIC, &dwSize, FALSE);
if(pStr)
if (pCurrentConfig->Gw)
{
RegSetValueExW(hKey, L"DefaultGatewayMetric", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
MIB_IPFORWARDROW RouterMib;
ZeroMemory(&RouterMib, sizeof(MIB_IPFORWARDROW));
RouterMib.dwForwardMetric1 = 1;
RouterMib.dwForwardIfIndex = pOldConfig->Index;
RouterMib.dwForwardNextHop = htonl(pCurrentConfig->Gw->IpAddress);
//TODO
// add multiple gw addresses when required
if (CreateIpForwardEntry(&RouterMib) == NO_ERROR)
{
pStr = CreateMultiSzString(pCurrentConfig->Gw, IPADDR, &dwSize, FALSE);
if(pStr)
{
RegSetValueExW(hKey, L"DefaultGateway", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
}
pStr = CreateMultiSzString(pCurrentConfig->Gw, METRIC, &dwSize, FALSE);
if(pStr)
{
RegSetValueExW(hKey, L"DefaultGatewayMetric", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
CoTaskMemFree(pStr);
}
}
}
else
{
RegSetValueExW(hKey, L"DefaultGateway", 0, REG_MULTI_SZ, (LPBYTE)L"", 1 * sizeof(WCHAR));
RegSetValueExW(hKey, L"DefaultGatewayMetric", 0, REG_MULTI_SZ, (LPBYTE)L"\0", sizeof(WCHAR) * 2);
}
if (!pCurrentConfig->Ns || pCurrentConfig->AutoconfigActive)
{
RegSetValueExW(hKey, L"NameServer", 0, REG_SZ, (LPBYTE)L"", 1 * sizeof(WCHAR));
}
else
{
pStr = CreateMultiSzString(pCurrentConfig->Ns, IPADDR, &dwSize, TRUE);
if(pStr)
{
RegSetValueExW(hKey, L"NameServer", 0, REG_SZ, (LPBYTE)pStr, dwSize);
RegDeleteValueW(hKey, L"DhcpNameServer");
CoTaskMemFree(pStr);
}
}
RegCloseKey(hKey);
}
if (!This->pCurrentConfig->Ns || This->pCurrentConfig->AutoconfigActive)
{
RegSetValueExW(hKey, L"NameServer", 0, REG_SZ, (LPBYTE)L"", 1 * sizeof(WCHAR));
}
else
{
pStr = CreateMultiSzString(This->pCurrentConfig->Ns, IPADDR, &dwSize, TRUE);
if(pStr)
{
RegSetValueExW(hKey, L"NameServer", 0, REG_SZ, (LPBYTE)pStr, dwSize);
RegDeleteValueW(hKey, L"DhcpNameServer");
CoTaskMemFree(pStr);
}
}
RegCloseKey(hKey);
}
return S_OK;
}
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "Íåíàëè÷íî", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Ïîäðîáíîñòè...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Detaily...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "Nicht verfügbar", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -57,13 +57,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 110, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 110, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 110, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 110, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 110, 62, 80, 8
PUSHBUTTON "&Detalles...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Détails...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Detil...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -67,13 +67,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Dettagli...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -66,13 +66,13 @@ BEGIN
RTEXT "Ikke tilgjengelig", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Detaljer...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "n/d", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Szczegó³y...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Äîïîëíèòåëüíî...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -68,13 +68,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "Po&drobnosti...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -63,13 +63,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -65,13 +65,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Ñêëàä...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+2 -2
View File
@@ -62,13 +62,13 @@ BEGIN
RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8
RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8
RTEXT "", IDC_DETAILSGATEWAY, 122, 62, 80, 8
PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14
END
IDD_LAN_NETSTATUSDETAILS DIALOGEX DISCARDABLE 0, 0, 200,200
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION
CAPTION "Network Connection Details"
FONT 8, "MS Shell Dlg"
BEGIN
+24 -13
View File
@@ -336,7 +336,7 @@ AddIPAddressToListView(
{
ZeroMemory(&li, sizeof(LVITEMW));
li.mask = LVIF_TEXT;
li.iItem = ListView_GetItemCount(hDlgCtrl);
li.iItem = Index;
li.iSubItem = 0;
li.pszText = L"";
li.iItem = SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li);
@@ -346,7 +346,7 @@ AddIPAddressToListView(
{
li.pszText = szBuffer;
li.iSubItem = 1;
li.iItem = ListView_GetItemCount(hDlgCtrl);
li.iItem = Index++;
SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
}
SubIndex++;
@@ -365,7 +365,7 @@ InsertItemToListView(
ZeroMemory(&li, sizeof(LVITEMW));
li.mask = LVIF_TEXT;
li.iItem = ListView_GetItemCount(hDlgCtrl);
if (LoadStringW(netshell_hInstance, IDS_PHYSICAL_ADDRESS, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
if (LoadStringW(netshell_hInstance, ResId, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
{
li.pszText = szBuffer;
return (INT)SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li);
@@ -429,9 +429,11 @@ LANStatusUiDetailsDlg(
{
li.iItem = InsertItemToListView(hDlgCtrl, IDS_PHYSICAL_ADDRESS);
if (li.iItem >= 0)
if (MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pCurAdapter->Address, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
{
swprintf(szBuffer, L"%02x-%02x-%02x-%02x-%02x-%02x",pCurAdapter->Address[0], pCurAdapter->Address[1],
pCurAdapter->Address[2], pCurAdapter->Address[3], pCurAdapter->Address[4], pCurAdapter->Address[5]);
SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
}
li.iItem = InsertItemToListView(hDlgCtrl, IDS_IP_ADDRESS);
if (li.iItem >= 0)
if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->IpAddressList.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
@@ -443,10 +445,11 @@ LANStatusUiDetailsDlg(
SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
li.iItem = InsertItemToListView(hDlgCtrl, IDS_DEF_GATEWAY);
if (li.iItem >= 0)
if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->DhcpServer.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
if (li.iItem >= 0 && pCurAdapter->GatewayList.IpAddress.String[0] != '0')
{
if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->GatewayList.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
}
#if 0
li.iItem = InsertItemToListView(hDlgCtrl, IDS_LEASE_OBTAINED);
li.iItem = InsertItemToListView(hDlgCtrl, IDS_LEASE_EXPIRES);
@@ -478,6 +481,12 @@ LANStatusUiDetailsDlg(
#endif
CoTaskMemFree(pAdapterInfo);
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_CLOSE)
{
EndDialog(hwndDlg, FALSE);
break;
}
}
return FALSE;
}
@@ -523,10 +532,12 @@ LANStatusUiAdvancedDlg(
SendDlgItemMessageW(hwndDlg, IDC_DETAILSSUBNET, WM_SETTEXT, 0, (LPARAM)szBuffer);
dwIpAddr = ntohl(pContext->Gateway);
swprintf(szBuffer, L"%u.%u.%u.%u", FIRST_IPADDRESS(dwIpAddr), SECOND_IPADDRESS(dwIpAddr),
THIRD_IPADDRESS(dwIpAddr), FOURTH_IPADDRESS(dwIpAddr));
SendDlgItemMessageW(hwndDlg, IDC_DETAILSGATEWAY, WM_SETTEXT, 0, (LPARAM)szBuffer);
if (dwIpAddr)
{
swprintf(szBuffer, L"%u.%u.%u.%u", FIRST_IPADDRESS(dwIpAddr), SECOND_IPADDRESS(dwIpAddr),
THIRD_IPADDRESS(dwIpAddr), FOURTH_IPADDRESS(dwIpAddr));
SendDlgItemMessageW(hwndDlg, IDC_DETAILSGATEWAY, WM_SETTEXT, 0, (LPARAM)szBuffer);
}
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_DETAILS)
+113 -355
View File
@@ -19,11 +19,14 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* TODO:
* - IRunningObjectTable should work interprocess, but currently doesn't.
* Native (on Win2k at least) uses an undocumented RPC interface, IROT, to
* communicate with RPCSS which contains the table of marshalled data.
*/
#include "config.h"
#include "wine/port.h"
#include <assert.h>
#include <stdarg.h>
#include <string.h>
@@ -39,33 +42,25 @@
#include "wine/list.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include "wine/exception.h"
#include "compobj_private.h"
#include "moniker.h"
#include "irot.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
/* see MSDN docs for IROTData::GetComparisonData, which states what this
* constant is
*/
* constant is (http://msdn2.microsoft.com/en-us/library/ms693773.aspx) */
#define MAX_COMPARISON_DATA 2048
static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
{
return I_RpcExceptionFilter(eptr->ExceptionRecord->ExceptionCode);
}
/* define the structure of the running object table elements */
struct rot_entry
{
struct list entry;
InterfaceData* object; /* marshaled running object*/
MonikerComparisonData* moniker_data; /* moniker comparison data that identifies this object */
MInterfacePointer* object; /* marshaled running object*/
MInterfacePointer* moniker; /* marshaled moniker that identifies this object */
MInterfacePointer* moniker_data; /* moniker comparison data that identifies this object */
DWORD cookie; /* cookie identifying this object */
FILETIME last_modified;
IrotContextHandle ctxt_handle;
};
/* define the RunningObjectTableImpl structure */
@@ -79,7 +74,16 @@ typedef struct RunningObjectTableImpl
} RunningObjectTableImpl;
static RunningObjectTableImpl* runningObjectTableInstance = NULL;
static IrotHandle irot_handle;
static inline HRESULT WINAPI
IrotRegister(DWORD *cookie)
{
static LONG last_cookie = 1;
*cookie = InterlockedIncrement(&last_cookie);
return S_OK;
}
/* define the EnumMonikerImpl structure */
typedef struct EnumMonikerImpl
@@ -87,79 +91,17 @@ typedef struct EnumMonikerImpl
const IEnumMonikerVtbl *lpVtbl;
LONG ref;
InterfaceList *moniker_list;
MInterfacePointer **monikers;
ULONG moniker_count;
ULONG pos;
} EnumMonikerImpl;
/* IEnumMoniker Local functions*/
static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
ULONG pos, IEnumMoniker **ppenumMoniker);
static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(MInterfacePointer **monikers,
ULONG moniker_count, ULONG pos, IEnumMoniker **ppenumMoniker);
static IrotHandle get_irot_handle(void)
{
if (!irot_handle)
{
RPC_STATUS status;
RPC_WSTR binding;
IrotHandle new_handle;
unsigned short ncacn_np[] = IROT_PROTSEQ;
unsigned short endpoint[] = IROT_ENDPOINT;
status = RpcStringBindingComposeW(NULL, ncacn_np, NULL, endpoint, NULL, &binding);
if (status == RPC_S_OK)
{
status = RpcBindingFromStringBindingW(binding, &new_handle);
RpcStringFreeW(&binding);
}
if (status != RPC_S_OK)
return NULL;
if (InterlockedCompareExchangePointer(&irot_handle, new_handle, NULL))
/* another thread beat us to it */
RpcBindingFree(&new_handle);
}
return irot_handle;
}
static BOOL start_rpcss(void)
{
PROCESS_INFORMATION pi;
STARTUPINFOW si;
static WCHAR cmd[6];
static const WCHAR rpcss[] = {'r','p','c','s','s',0};
BOOL rslt;
TRACE("\n");
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
ZeroMemory(&si, sizeof(STARTUPINFOA));
si.cb = sizeof(STARTUPINFOA);
memcpy(cmd, rpcss, sizeof(rpcss));
rslt = CreateProcessW(
NULL, /* executable */
cmd, /* command line */
NULL, /* process security attributes */
NULL, /* primary thread security attributes */
FALSE, /* inherit handles */
0, /* creation flags */
NULL, /* use parent's environment */
NULL, /* use parent's current directory */
&si, /* STARTUPINFO pointer */
&pi /* PROCESS_INFORMATION */
);
if (rslt)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
Sleep(100);
}
return rslt;
}
static HRESULT create_stream_on_mip_ro(const InterfaceData *mip, IStream **stream)
static HRESULT create_stream_on_mip_ro(const MInterfacePointer *mip, IStream **stream)
{
HGLOBAL hglobal = GlobalAlloc(0, mip->ulCntData);
void *pv = GlobalLock(hglobal);
@@ -170,33 +112,7 @@ static HRESULT create_stream_on_mip_ro(const InterfaceData *mip, IStream **strea
static inline void rot_entry_delete(struct rot_entry *rot_entry)
{
if (rot_entry->cookie)
{
InterfaceData *object = NULL;
InterfaceData *moniker = NULL;
__TRY
{
IrotRevoke(get_irot_handle(), rot_entry->cookie,
&rot_entry->ctxt_handle, &object, &moniker);
}
__EXCEPT(rpc_filter)
{
}
__ENDTRY
MIDL_user_free(object);
if (moniker)
{
IStream *stream;
HRESULT hr;
hr = create_stream_on_mip_ro(moniker, &stream);
if (hr == S_OK)
{
CoReleaseMarshalData(stream);
IUnknown_Release(stream);
}
}
MIDL_user_free(moniker);
}
/* FIXME: revoke entry from rpcss's copy of the ROT */
if (rot_entry->object)
{
IStream *stream;
@@ -208,13 +124,25 @@ static inline void rot_entry_delete(struct rot_entry *rot_entry)
IUnknown_Release(stream);
}
}
if (rot_entry->moniker)
{
IStream *stream;
HRESULT hr;
hr = create_stream_on_mip_ro(rot_entry->moniker, &stream);
if (hr == S_OK)
{
CoReleaseMarshalData(stream);
IUnknown_Release(stream);
}
}
HeapFree(GetProcessHeap(), 0, rot_entry->object);
HeapFree(GetProcessHeap(), 0, rot_entry->moniker);
HeapFree(GetProcessHeap(), 0, rot_entry->moniker_data);
HeapFree(GetProcessHeap(), 0, rot_entry);
}
/* moniker_data must be freed with HeapFree when no longer in use */
static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparisonData **moniker_data)
static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MInterfacePointer **moniker_data)
{
HRESULT hr;
IROTData *pROTData = NULL;
@@ -222,14 +150,8 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparison
if (SUCCEEDED(hr))
{
ULONG size = MAX_COMPARISON_DATA;
*moniker_data = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MonikerComparisonData, abData[size]));
if (!*moniker_data)
{
IROTData_Release(pROTData);
return E_OUTOFMEMORY;
}
*moniker_data = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MInterfacePointer, abData[size]));
hr = IROTData_GetComparisonData(pROTData, (*moniker_data)->abData, size, &size);
IROTData_Release(pROTData);
if (hr != S_OK)
{
ERR("Failed to copy comparison data into buffer, hr = 0x%08x\n", hr);
@@ -263,7 +185,7 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparison
len = strlenW(pszDisplayName);
*moniker_data = HeapAlloc(GetProcessHeap(), 0,
FIELD_OFFSET(MonikerComparisonData, abData[sizeof(CLSID) + (len+1)*sizeof(WCHAR)]));
FIELD_OFFSET(MInterfacePointer, abData[sizeof(CLSID) + (len+1)*sizeof(WCHAR)]));
if (!*moniker_data)
{
CoTaskMemFree(pszDisplayName);
@@ -273,7 +195,6 @@ static HRESULT get_moniker_comparison_data(IMoniker *pMoniker, MonikerComparison
memcpy(&(*moniker_data)->abData[0], &clsid, sizeof(clsid));
memcpy(&(*moniker_data)->abData[sizeof(clsid)], pszDisplayName, (len+1)*sizeof(WCHAR));
CoTaskMemFree(pszDisplayName);
}
return S_OK;
}
@@ -346,7 +267,6 @@ static HRESULT WINAPI
RunningObjectTableImpl_Destroy(void)
{
struct list *cursor, *cursor2;
IrotHandle old_handle;
TRACE("()\n");
@@ -368,11 +288,6 @@ RunningObjectTableImpl_Destroy(void)
HeapFree(GetProcessHeap(),0,runningObjectTableInstance);
runningObjectTableInstance = NULL;
old_handle = irot_handle;
irot_handle = NULL;
if (old_handle)
RpcBindingFree(&old_handle);
return S_OK;
}
@@ -426,7 +341,6 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
IStream *pStream = NULL;
DWORD mshlflags;
IBindCtx *pbc;
InterfaceData *moniker = NULL;
TRACE("(%p,%d,%p,%p,%p)\n",This,grfFlags,punkObject,pmkObjectName,pdwRegister);
@@ -464,7 +378,7 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
const void *pv = GlobalLock(hglobal);
rot_entry->object = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MInterfacePointer, abData[size]));
rot_entry->object->ulCntData = size;
memcpy(rot_entry->object->abData, pv, size);
memcpy(&rot_entry->object->abData, pv, size);
GlobalUnlock(hglobal);
}
}
@@ -528,9 +442,9 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
{
SIZE_T size = GlobalSize(hglobal);
const void *pv = GlobalLock(hglobal);
moniker = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(InterfaceData, abData[size]));
moniker->ulCntData = size;
memcpy(moniker->abData, pv, size);
rot_entry->moniker = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(MInterfacePointer, abData[size]));
rot_entry->moniker->ulCntData = size;
memcpy(&rot_entry->moniker->abData, pv, size);
GlobalUnlock(hglobal);
}
}
@@ -538,35 +452,13 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
IMoniker_Release(pmkObjectName);
if (hr != S_OK)
{
HeapFree(GetProcessHeap(), 0, moniker);
rot_entry_delete(rot_entry);
return hr;
}
while (TRUE)
{
__TRY
{
hr = IrotRegister(get_irot_handle(), rot_entry->moniker_data,
rot_entry->object, moniker,
&rot_entry->last_modified, grfFlags,
&rot_entry->cookie, &rot_entry->ctxt_handle);
}
__EXCEPT(rpc_filter)
{
hr = HRESULT_FROM_WIN32(GetExceptionCode());
}
__ENDTRY
if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
{
if (start_rpcss())
continue;
}
break;
}
HeapFree(GetProcessHeap(), 0, moniker);
if (FAILED(hr))
/* FIXME: not the right signature of IrotRegister function */
hr = IrotRegister(&rot_entry->cookie);
if (hr != S_OK)
{
rot_entry_delete(rot_entry);
return hr;
@@ -576,6 +468,7 @@ RunningObjectTableImpl_Register(IRunningObjectTable* iface, DWORD grfFlags,
*pdwRegister = rot_entry->cookie;
EnterCriticalSection(&This->lock);
/* FIXME: see if object was registered before and return MK_S_MONIKERALREADYREGISTERED */
list_add_tail(&This->rot, &rot_entry->entry);
LeaveCriticalSection(&This->lock);
@@ -623,9 +516,9 @@ static HRESULT WINAPI
RunningObjectTableImpl_IsRunning( IRunningObjectTable* iface, IMoniker *pmkObjectName)
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
MonikerComparisonData *moniker_data;
MInterfacePointer *moniker_data;
HRESULT hr;
const struct rot_entry *rot_entry;
struct rot_entry *rot_entry;
TRACE("(%p,%p)\n",This,pmkObjectName);
@@ -639,10 +532,10 @@ RunningObjectTableImpl_IsRunning( IRunningObjectTable* iface, IMoniker *pmkObjec
hr = S_FALSE;
EnterCriticalSection(&This->lock);
LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, const struct rot_entry, entry)
LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, struct rot_entry, entry)
{
if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
!memcmp(moniker_data->abData, rot_entry->moniker_data->abData, moniker_data->ulCntData))
!memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
{
hr = S_OK;
break;
@@ -650,27 +543,7 @@ RunningObjectTableImpl_IsRunning( IRunningObjectTable* iface, IMoniker *pmkObjec
}
LeaveCriticalSection(&This->lock);
if (hr == S_FALSE)
{
while (TRUE)
{
__TRY
{
hr = IrotIsRunning(get_irot_handle(), moniker_data);
}
__EXCEPT(rpc_filter)
{
hr = HRESULT_FROM_WIN32(GetExceptionCode());
}
__ENDTRY
if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
{
if (start_rpcss())
continue;
}
break;
}
}
/* FIXME: call IrotIsRunning */
HeapFree(GetProcessHeap(), 0, moniker_data);
@@ -689,9 +562,7 @@ RunningObjectTableImpl_GetObject( IRunningObjectTable* iface,
IMoniker *pmkObjectName, IUnknown **ppunkObject)
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
MonikerComparisonData *moniker_data;
InterfaceData *object = NULL;
IrotCookie cookie;
MInterfacePointer *moniker_data;
HRESULT hr;
struct rot_entry *rot_entry;
@@ -714,7 +585,7 @@ RunningObjectTableImpl_GetObject( IRunningObjectTable* iface,
LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, struct rot_entry, entry)
{
if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
!memcmp(moniker_data->abData, rot_entry->moniker_data->abData, moniker_data->ulCntData))
!memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
{
IStream *pStream;
hr = create_stream_on_mip_ro(rot_entry->object, &pStream);
@@ -732,39 +603,9 @@ RunningObjectTableImpl_GetObject( IRunningObjectTable* iface,
}
LeaveCriticalSection(&This->lock);
TRACE("moniker unavailable locally, calling SCM\n");
while (TRUE)
{
__TRY
{
hr = IrotGetObject(get_irot_handle(), moniker_data, &object, &cookie);
}
__EXCEPT(rpc_filter)
{
hr = HRESULT_FROM_WIN32(GetExceptionCode());
}
__ENDTRY
if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
{
if (start_rpcss())
continue;
}
break;
}
if (SUCCEEDED(hr))
{
IStream *pStream;
hr = create_stream_on_mip_ro(object, &pStream);
if (hr == S_OK)
{
hr = CoUnmarshalInterface(pStream, &IID_IUnknown, (void **)ppunkObject);
IStream_Release(pStream);
}
}
else
WARN("Moniker unavailable, IrotGetObject returned 0x%08x\n", hr);
/* FIXME: call IrotGetObject */
WARN("Moniker unavailable - app may require interprocess running object table\n");
hr = MK_E_UNAVAILABLE;
HeapFree(GetProcessHeap(), 0, moniker_data);
@@ -784,7 +625,6 @@ RunningObjectTableImpl_NoteChangeTime(IRunningObjectTable* iface,
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
struct rot_entry *rot_entry;
HRESULT hr = E_INVALIDARG;
TRACE("(%p,%d,%p)\n",This,dwRegister,pfiletime);
@@ -795,34 +635,14 @@ RunningObjectTableImpl_NoteChangeTime(IRunningObjectTable* iface,
{
rot_entry->last_modified = *pfiletime;
LeaveCriticalSection(&This->lock);
while (TRUE)
{
__TRY
{
hr = IrotNoteChangeTime(get_irot_handle(), dwRegister, pfiletime);
}
__EXCEPT(rpc_filter)
{
hr = HRESULT_FROM_WIN32(GetExceptionCode());
}
__ENDTRY
if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
{
if (start_rpcss())
continue;
}
break;
}
goto done;
return S_OK;
}
}
LeaveCriticalSection(&This->lock);
done:
TRACE("-- 0x08%x\n", hr);
return hr;
/* FIXME: call IrotNoteChangeTime */
return E_INVALIDARG;
}
/***********************************************************************
@@ -838,8 +658,8 @@ RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable* iface,
{
HRESULT hr = MK_E_UNAVAILABLE;
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
MonikerComparisonData *moniker_data;
const struct rot_entry *rot_entry;
MInterfacePointer *moniker_data;
struct rot_entry *rot_entry;
TRACE("(%p,%p,%p)\n",This,pmkObjectName,pfiletime);
@@ -857,10 +677,10 @@ RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable* iface,
hr = MK_E_UNAVAILABLE;
EnterCriticalSection(&This->lock);
LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, const struct rot_entry, entry)
LIST_FOR_EACH_ENTRY(rot_entry, &This->rot, struct rot_entry, entry)
{
if ((rot_entry->moniker_data->ulCntData == moniker_data->ulCntData) &&
!memcmp(moniker_data->abData, rot_entry->moniker_data->abData, moniker_data->ulCntData))
!memcmp(&moniker_data->abData, &rot_entry->moniker_data->abData, moniker_data->ulCntData))
{
*pfiletime = rot_entry->last_modified;
hr = S_OK;
@@ -869,31 +689,9 @@ RunningObjectTableImpl_GetTimeOfLastChange(IRunningObjectTable* iface,
}
LeaveCriticalSection(&This->lock);
if (hr != S_OK)
{
while (TRUE)
{
__TRY
{
hr = IrotGetTimeOfLastChange(get_irot_handle(), moniker_data, pfiletime);
}
__EXCEPT(rpc_filter)
{
hr = HRESULT_FROM_WIN32(GetExceptionCode());
}
__ENDTRY
if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
{
if (start_rpcss())
continue;
}
break;
}
}
/* FIXME: if (hr != S_OK) call IrotGetTimeOfLastChange */
HeapFree(GetProcessHeap(), 0, moniker_data);
TRACE("-- 0x%08x\n", hr);
return hr;
}
@@ -907,36 +705,33 @@ static HRESULT WINAPI
RunningObjectTableImpl_EnumRunning(IRunningObjectTable* iface,
IEnumMoniker **ppenumMoniker)
{
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
InterfaceList *interface_list = NULL;
HRESULT hr;
RunningObjectTableImpl *This = (RunningObjectTableImpl *)iface;
MInterfacePointer **monikers;
ULONG moniker_count = 0;
const struct rot_entry *rot_entry;
ULONG i = 0;
TRACE("(%p, %p)\n", This, ppenumMoniker);
EnterCriticalSection(&This->lock);
*ppenumMoniker = NULL;
LIST_FOR_EACH_ENTRY( rot_entry, &This->rot, const struct rot_entry, entry )
moniker_count++;
while (TRUE)
monikers = HeapAlloc(GetProcessHeap(), 0, moniker_count * sizeof(*monikers));
LIST_FOR_EACH_ENTRY( rot_entry, &This->rot, const struct rot_entry, entry )
{
__TRY
{
hr = IrotEnumRunning(get_irot_handle(), &interface_list);
}
__EXCEPT(rpc_filter)
{
hr = HRESULT_FROM_WIN32(GetExceptionCode());
}
__ENDTRY
if (hr == HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE))
{
if (start_rpcss())
continue;
}
break;
SIZE_T size = FIELD_OFFSET(MInterfacePointer, abData[rot_entry->moniker->ulCntData]);
monikers[i] = HeapAlloc(GetProcessHeap(), 0, size);
memcpy(monikers[i], rot_entry->moniker, size);
i++;
}
if (SUCCEEDED(hr))
hr = EnumMonikerImpl_CreateEnumROTMoniker(interface_list,
0, ppenumMoniker);
LeaveCriticalSection(&This->lock);
/* FIXME: call IrotEnumRunning and append data */
hr = EnumMonikerImpl_CreateEnumROTMoniker(monikers, moniker_count, 0, ppenumMoniker);
return hr;
}
@@ -972,9 +767,9 @@ HRESULT WINAPI RunningObjectTableImpl_Initialize(void)
/* initialize the virtual table function */
runningObjectTableInstance->lpVtbl = &VT_RunningObjectTableImpl;
/* the initial reference is set to "1" so that it isn't destroyed after its
* first use until the process is destroyed, as the running object table is
* a process-wide cache of a global table */
/* the initial reference is set to "1" ! because if set to "0" it will be not practis when */
/* the ROT referred many times not in the same time (all the objects in the ROT will */
/* be removed every time the ROT is removed ) */
runningObjectTableInstance->ref = 1;
list_init(&runningObjectTableInstance->rot);
@@ -1078,21 +873,6 @@ static HRESULT get_moniker_for_progid_display_name(LPBC pbc,
IParseDisplayName *pdn;
hr = IMoniker_BindToObject(class_moniker, pbc, NULL,
&IID_IParseDisplayName, (void **)&pdn);
/* fallback to using IClassFactory to get IParseDisplayName -
* adsldp.dll depends on this */
if (FAILED(hr))
{
IClassFactory *pcf;
hr = IMoniker_BindToObject(class_moniker, pbc, NULL,
&IID_IClassFactory, (void **)&pcf);
if (SUCCEEDED(hr))
{
hr = IClassFactory_CreateInstance(pcf, NULL,
&IID_IParseDisplayName,
(void **)&pdn);
IClassFactory_Release(pcf);
}
}
IMoniker_Release(class_moniker);
if (SUCCEEDED(hr))
{
@@ -1211,9 +991,9 @@ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid)
return res;
}
/* If the file is not a storage object then attempt to match various bits in the file against a
pattern in the registry. This case is not frequently used, so I present only the pseudocode for
this case.
/* if the file is not a storage object then attemps to match various bits in the file against a
pattern in the registry. this case is not frequently used ! so I present only the psodocode for
this case
for(i=0;i<nFileTypes;i++)
@@ -1240,7 +1020,7 @@ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid)
nbElm=FileMonikerImpl_DecomposePath(filePathName,&pathDec);
absFile=pathDec[nbElm-1];
/* failed if the path represents a directory and not an absolute file name*/
/* failed if the path represente a directory and not an absolute file name*/
if (!lstrcmpW(absFile, bkslashW))
return MK_E_INVALIDEXTENSION;
@@ -1335,9 +1115,9 @@ static ULONG WINAPI EnumMonikerImpl_Release(IEnumMoniker* iface)
TRACE("(%p) Deleting\n",This);
for (i = 0; i < This->moniker_list->size; i++)
HeapFree(GetProcessHeap(), 0, This->moniker_list->interfaces[i]);
HeapFree(GetProcessHeap(), 0, This->moniker_list);
for (i = 0; i < This->moniker_count; i++)
HeapFree(GetProcessHeap(), 0, This->monikers[i]);
HeapFree(GetProcessHeap(), 0, This->monikers);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -1352,13 +1132,13 @@ static HRESULT WINAPI EnumMonikerImpl_Next(IEnumMoniker* iface, ULONG celt, IM
EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
HRESULT hr = S_OK;
TRACE("(%p) TabCurrentPos %d Tablastindx %d\n", This, This->pos, This->moniker_list->size);
TRACE("(%p) TabCurrentPos %d Tablastindx %d\n", This, This->pos, This->moniker_count);
/* retrieve the requested number of moniker from the current position */
for(i = 0; (This->pos < This->moniker_list->size) && (i < celt); i++)
for(i = 0; (This->pos < This->moniker_count) && (i < celt); i++)
{
IStream *stream;
hr = create_stream_on_mip_ro(This->moniker_list->interfaces[This->pos++], &stream);
hr = create_stream_on_mip_ro(This->monikers[This->pos++], &stream);
if (hr != S_OK) break;
hr = CoUnmarshalInterface(stream, &IID_IMoniker, (void **)&rgelt[i]);
IStream_Release(stream);
@@ -1387,7 +1167,7 @@ static HRESULT WINAPI EnumMonikerImpl_Skip(IEnumMoniker* iface, ULONG celt)
TRACE("(%p)\n",This);
if (This->pos + celt >= This->moniker_list->size)
if (This->pos + celt >= This->moniker_count)
return S_FALSE;
This->pos += celt;
@@ -1415,35 +1195,21 @@ static HRESULT WINAPI EnumMonikerImpl_Reset(IEnumMoniker* iface)
static HRESULT WINAPI EnumMonikerImpl_Clone(IEnumMoniker* iface, IEnumMoniker ** ppenum)
{
EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
InterfaceList *moniker_list;
MInterfacePointer **monikers = HeapAlloc(GetProcessHeap(), 0, sizeof(*monikers)*This->moniker_count);
ULONG i;
TRACE("(%p)\n",This);
*ppenum = NULL;
moniker_list = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(InterfaceList, interfaces[This->moniker_list->size]));
if (!moniker_list)
return E_OUTOFMEMORY;
moniker_list->size = This->moniker_list->size;
for (i = 0; i < This->moniker_list->size; i++)
for (i = 0; i < This->moniker_count; i++)
{
SIZE_T size = FIELD_OFFSET(InterfaceData, abData[This->moniker_list->interfaces[i]->ulCntData]);
moniker_list->interfaces[i] = HeapAlloc(GetProcessHeap(), 0, size);
if (!moniker_list->interfaces[i])
{
ULONG end = i;
for (i = 0; i < end; i++)
HeapFree(GetProcessHeap(), 0, moniker_list->interfaces[i]);
HeapFree(GetProcessHeap(), 0, moniker_list);
return E_OUTOFMEMORY;
}
memcpy(moniker_list->interfaces[i], This->moniker_list->interfaces[i], size);
SIZE_T size = FIELD_OFFSET(MInterfacePointer, abData[This->monikers[i]->ulCntData]);
monikers[i] = HeapAlloc(GetProcessHeap(), 0, size);
memcpy(monikers[i], This->monikers[i], size);
}
/* copy the enum structure */
return EnumMonikerImpl_CreateEnumROTMoniker(moniker_list, This->pos, ppenum);
return EnumMonikerImpl_CreateEnumROTMoniker(monikers, This->moniker_count,
This->pos, ppenum);
}
/* Virtual function table for the IEnumMoniker class. */
@@ -1463,7 +1229,8 @@ static const IEnumMonikerVtbl VT_EnumMonikerImpl =
* Used by EnumRunning to create the structure and EnumClone
* to copy the structure
*/
static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *moniker_list,
static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(MInterfacePointer **monikers,
ULONG moniker_count,
ULONG current_pos,
IEnumMoniker **ppenumMoniker)
{
@@ -1483,7 +1250,8 @@ static HRESULT WINAPI EnumMonikerImpl_CreateEnumROTMoniker(InterfaceList *monike
/* the initial reference is set to "1" */
This->ref = 1; /* set the ref count to one */
This->pos = current_pos; /* Set the list start posn */
This->moniker_list = moniker_list;
This->moniker_count = moniker_count; /* Need the same size table as ROT */
This->monikers = monikers;
*ppenumMoniker = (IEnumMoniker*)This;
@@ -1659,13 +1427,3 @@ HRESULT MonikerMarshal_Create(IMoniker *inner, IUnknown **outer)
*outer = (IUnknown *)&This->lpVtbl;
return S_OK;
}
void * __RPC_USER MIDL_user_allocate(size_t size)
{
return HeapAlloc(GetProcessHeap(), 0, size);
}
void __RPC_USER MIDL_user_free(void *p)
{
HeapFree(GetProcessHeap(), 0, p);
}
-1
View File
@@ -14,7 +14,6 @@
<library>advapi32</library>
<library>user32</library>
<library>gdi32</library>
<library>ole32_irot_client</library>
<library>ole32_proxy</library>
<library>rpcrt4</library>
<library>kernel32</library>
+5 -3
View File
@@ -678,7 +678,7 @@ SH_ShowDriveProperties(WCHAR * drive, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *
PROPSHEETHEADERW psh;
BOOL ret;
UINT i;
WCHAR szName[MAX_PATH];
WCHAR szName[MAX_PATH+6];
DWORD dwMaxComponent, dwFileSysFlags;
IDataObject * pDataObj = NULL;
@@ -700,8 +700,8 @@ SH_ShowDriveProperties(WCHAR * drive, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *
/* FIXME
* check if disk is a really a local hdd
*/
i = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szName, sizeof(szName)/sizeof(WCHAR));
if (i > 0 && i < (sizeof(szName)/sizeof(WCHAR)) + 6)
i = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szName, sizeof(szName)/sizeof(WCHAR)-6);
if (i > 0 && i < (sizeof(szName)/sizeof(WCHAR)) - 6)
{
szName[i] = L' ';
szName[i+1] = L'(';
@@ -929,6 +929,8 @@ InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext)
HWND hDlgCtrl;
Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR));
if (Length < 0)
Length = 0;
szDrive[0] = pContext->Drive + L'A';
if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR)))
{
+2 -2
View File
@@ -97,8 +97,8 @@ BOOL HasItemWithCLSID(IEnumIDList *iface, LPITEMIDLIST pidl)
while(pCur)
{
REFIID curid = _ILGetGUIDPointer(pCur->pidl);
if (IsEqualIID(curid, refid))
LPGUID curid = _ILGetGUIDPointer(pCur->pidl);
if (curid && IsEqualGUID(curid, refid))
{
return TRUE;
}
+22 -11
View File
@@ -424,8 +424,8 @@ static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface,
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
wcscpy(pszPath, This->szTarget);
else
HCR_GetClassNameW(&CLSID_AdminFolderShortcut, pszPath, MAX_PATH);
else if (!HCR_GetClassNameW(&CLSID_AdminFolderShortcut, pszPath, MAX_PATH))
hr = E_FAIL;
}
else if (_ILIsPidlSimple(pidl))
{
@@ -436,12 +436,23 @@ static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface,
wcscpy(pszPath, This->szTarget);
pOffset = PathAddBackslashW(pszPath);
if (pOffset)
_ILSimpleGetTextW(pidl, pOffset, MAX_PATH + 1 - (pOffset - pszPath));
{
if (!_ILSimpleGetTextW(pidl, pOffset, MAX_PATH + 1 - (pOffset - pszPath)))
hr = E_FAIL;
}
else
hr = E_FAIL;
}
else
{
_ILSimpleGetTextW(pidl, pszPath, MAX_PATH + 1);
}
{
if (_ILSimpleGetTextW(pidl, pszPath, MAX_PATH + 1))
{
if (SHELL_FS_HideExtension(pszPath))
PathRemoveExtensionW(pszPath);
}
else
hr = E_FAIL;
}
}
else if (_ILIsSpecialFolder(pidl))
{
@@ -449,10 +460,10 @@ static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface,
if (bSimplePidl)
{
_ILSimpleGetTextW(pidl, pszPath, MAX_PATH);
}
if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl)
if (!_ILSimpleGetTextW(pidl, pszPath, MAX_PATH))
hr = E_FAIL;
}
else if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl)
{
int len = 0;
@@ -473,11 +484,11 @@ static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface,
{
strRet->uType = STRRET_WSTR;
strRet->u.pOleStr = pszPath;
TRACE ("-- (%p)->(%s,0x%08x)\n", This, debugstr_w(strRet->u.pOleStr), hr);
}
else
CoTaskMemFree(pszPath);
TRACE ("-- (%p)->(%s,0x%08x)\n", This, debugstr_w(strRet->u.pOleStr), hr);
return hr;
}
@@ -1218,7 +1218,7 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive)
li.iSubItem = 0;
li.pszText = szVolume;
li.iItem = itemCount;
(void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMN, 0, (LPARAM)&li);
(void)SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li);
if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable , &TotalNumberOfBytes, &TotalNumberOfFreeBytes))
{
if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume, sizeof(szVolume) / sizeof(WCHAR)))
@@ -1383,11 +1383,17 @@ BitBucketDlg(
PDRIVE_ITEM_CONTEXT pItem;
BOOL bSuccess;
UINT uResult;
PROPSHEETPAGE * page;
DWORD dwStyle;
switch(uMsg)
{
case WM_INITDIALOG:
InitializeBitBucketDlg(hwndDlg, (WCHAR)lParam);
case WM_INITDIALOG:
page = (PROPSHEETPAGE*)lParam;
InitializeBitBucketDlg(hwndDlg, (WCHAR)page->lParam);
dwStyle = (DWORD) SendDlgItemMessage(hwndDlg, 14000, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
SendDlgItemMessage(hwndDlg, 14000, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
if (GetDlgCtrlID((HWND)wParam) != 14000)
{
SetFocus(GetDlgItem(hwndDlg, 14000));
+56
View File
@@ -835,6 +835,8 @@ static HRESULT ShellView_OpenSelectedItems(IShellViewImpl * This)
static UINT CF_IDLIST = 0;
HRESULT hr;
IDataObject* selection;
IContextMenu * cm;
HMENU hmenu;
FORMATETC fetc;
STGMEDIUM stgm;
LPIDA pIDList;
@@ -843,14 +845,68 @@ static HRESULT ShellView_OpenSelectedItems(IShellViewImpl * This)
LPCWSTR parent_dir = NULL;
SFGAOF attribs;
int i;
CMINVOKECOMMANDINFOEX ici;
MENUITEMINFOW info;
if (0 == ShellView_GetSelections(This))
{
return S_OK;
}
hr = IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl,
(LPCITEMIDLIST*)This->apidl, &IID_IContextMenu,
0, (LPVOID *)&cm);
if (SUCCEEDED(hr))
{
hmenu = CreatePopupMenu();
if (hmenu)
{
if (SUCCEEDED(IContextMenu_QueryContextMenu( cm, hmenu, 0, 0x20, 0x7fff, CMF_DEFAULTONLY)))
{
INT def = -1, n = GetMenuItemCount(hmenu);
for ( i = 0; i < n; i++ )
{
memset( &info, 0, sizeof info );
info.cbSize = sizeof info;
info.fMask = MIIM_FTYPE | MIIM_STATE | MIIM_ID;
if (GetMenuItemInfoW( hmenu, i, TRUE, &info))
{
if (info.fState & MFS_DEFAULT)
{
def = info.wID;
break;
}
}
}
if (def != -1)
{
memset( &ici, 0, sizeof ici );
ici.cbSize = sizeof ici;
ici.lpVerb = MAKEINTRESOURCEA( def );
ici.hwnd = This->hWnd;
IContextMenu_InvokeCommand(cm, (LPCMINVOKECOMMANDINFO) &ici );
IContextMenu_Release(cm);
DestroyMenu( hmenu );
return S_OK;
}
}
DestroyMenu( hmenu );
}
IContextMenu_Release(cm);
}
hr = IShellFolder_GetUIObjectOf(This->pSFParent, This->hWnd, This->cidl,
(LPCITEMIDLIST*)This->apidl, &IID_IDataObject,
0, (LPVOID *)&selection);
if (FAILED(hr))
return hr;
+4 -4
View File
@@ -1404,10 +1404,10 @@ DoProperties(
}
else if (_ILIsNetHood(This->dcm.apidl[0]))
{
/* FIXME
* implement nethood properties
*/
FIXME("implement network connection shell folder\n");
//FIXME path!
ShellExecuteW(NULL, L"open", L"explorer.exe",
L"/n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}",
NULL, SW_SHOWDEFAULT);
return S_OK;
}
else if (_ILIsBitBucket(This->dcm.apidl[0]))
@@ -0,0 +1,67 @@
#ifndef __ACMSC_H__
#define __ACMSC_H__
#define COMPILER_DEPENDENT_UINT64 unsigned __int64
#if defined(_M_IX86)
#define ACPI_ASM_MACROS
#define causeinterrupt(level)
#define BREAKPOINT3
#define halt() { __asm { sti } __asm { hlt } }
#define wbinvd()
__forceinline void _ACPI_ACQUIRE_GLOBAL_LOCK(void * GLptr, unsigned char * Acq_)
{
unsigned char Acq;
__asm
{
mov ecx, [GLptr]
L1: mov eax, [ecx]
mov edx, eax
and edx, ecx
bts edx, 1
adc edx, 0
lock cmpxchg [ecx], edx
jne L1
cmp dl, 3
sbb eax, eax
mov [Acq], al
};
*Acq_ = Acq;
}
#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
_ACPI_ACQUIRE_GLOBAL_LOCK((GLptr), (unsigned char *)&(Acq))
__forceinline void _ACPI_RELEASE_GLOBAL_LOCK(void * GLptr, unsigned char * Acq_)
{
unsigned char Acq;
__asm
{
mov ecx, [GLptr]
L1: mov eax, [ecx]
mov edx, eax
and edx, ecx
lock cmpxchg [ecx], edx
jnz L1
and eax, 1
mov [Acq], al
};
*Acq_ = Acq;
}
#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
_ACPI_RELEASE_GLOBAL_LOCK((GLptr), (unsigned char *)&(Acq))
#endif
#endif /* __ACMSC_H__ */
@@ -47,14 +47,25 @@
#endif
/* ReactOS uses GCC */
#if defined(__GNUC__)
#include "acgcc.h"
#undef disable
#define disable() __asm__("cli\n\t");
#define disable() __asm__("cli\n\t")
#undef enable
#define enable() __asm__("sti\n\t");
#define enable() __asm__("sti\n\t")
#elif defined(_MSC_VER)
#include "acmsc.h"
#undef disable
#define disable() __asm { cli }
#undef enable
#define enable() __asm { sti }
#endif
#undef DEBUGGER_THREADING
#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
@@ -20,7 +20,6 @@
@ fastcall KfRaiseIrql(long)
@ fastcall KfReleaseSpinLock(ptr long)
@ stdcall HalAcquireDisplayOwnership(ptr)
@ stdcall HalAdjustResourceList(ptr)
@ stdcall HalAllProcessorsStarted()
+3 -3
View File
@@ -9,18 +9,18 @@
<define name="_NTHAL_" />
<file>hal.c</file>
<file>hal.rc</file>
<file>hal.spec</file>
<file>hal.pspec</file>
</module>
</if>
<if property="ARCH" value="i386">
<module name="hal" type="kernelmodedll">
<importlibrary definition="hal.spec" />
<importlibrary definition="hal.pspec" />
<include base="ntoskrnl">include</include>
<library>ntoskrnl</library>
<define name="_NTHAL_" />
<file>hal.c</file>
<file>hal.rc</file>
<file>hal.spec</file>
<file>hal.pspec</file>
</module>
</if>
<if property="ARCH" value="i386">
+1 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
<module name="halarm_up" type="kernelmodedll" installbase="system32" installname="hal.dll">
<importlibrary base="hal" definition="hal.spec" />
<importlibrary base="hal" definition="hal.pspec" />
<bootstrap installbase="$(CDOUTPUT)" nameoncd="hal.dll" />
<include base="halarm_generic">../include</include>
<include base="ntoskrnl">include</include>
+1 -1
View File
@@ -2,7 +2,7 @@
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
<module name="halmp" type="kernelmodedll" entrypoint="0">
<importlibrary base="hal" definition="hal.spec" />
<importlibrary base="hal" definition="hal.pspec" />
<bootstrap installbase="$(CDOUTPUT)" />
<include>include</include>
<include base="ntoskrnl">include</include>
+1 -1
View File
@@ -2,7 +2,7 @@
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
<module name="halup" type="kernelmodedll" entrypoint="0" installname="hal.dll">
<importlibrary base="hal" definition="hal.spec" />
<importlibrary base="hal" definition="hal.pspec" />
<bootstrap installbase="$(CDOUTPUT)" />
<include>include</include>
<include base="ntoskrnl">include</include>
+1 -1
View File
@@ -2,7 +2,7 @@
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
<module name="halxbox" type="kernelmodedll" entrypoint="0" allowwarnings="true">
<importlibrary base="hal" definition="hal.spec" />
<importlibrary base="hal" definition="hal.pspec" />
<include>include</include>
<include base="ntoskrnl">include</include>
<define name="_DISABLE_TIDENTS" />
+4 -4
View File
@@ -218,11 +218,11 @@ typedef PVOID PUMDHPDEV;
typedef D3DNTHAL_CONTEXTCREATEDATA D3DNTHAL_CONTEXTCREATEI;
typedef LONG FIX;
typedef struct _CHWIDTHINFO
typedef struct _CHWIDTHINFO // Based on FD_DEVICEMETRICS
{
LONG lMaxNegA;
LONG lMaxNegC;
LONG lMinWidthD;
LONG lMinA;
LONG lMinC;
LONG lMinD;
} CHWIDTHINFO, *PCHWIDTHINFO;
typedef struct _UNIVERSAL_FONT_ID
+12 -5
View File
@@ -79,7 +79,7 @@ vDbgPrintExWithPrefixInternal(IN LPCSTR Prefix,
/* Copy it */
strncpy(Buffer, Prefix, PrefixLength);
/* Do the printf */
Length = _vsnprintf(Buffer + PrefixLength,
sizeof(Buffer) - PrefixLength,
@@ -109,7 +109,7 @@ vDbgPrintExWithPrefixInternal(IN LPCSTR Prefix,
/* Add the prefix */
Length += PrefixLength;
}
/* Build the string */
DebugString.Length = Length;
DebugString.Buffer = Buffer;
@@ -202,17 +202,19 @@ __cdecl
DbgPrint(PCCH Format,
...)
{
ULONG n;
va_list ap;
/* Call the internal routine that also handles ControlC */
va_start(ap, Format);
return vDbgPrintExWithPrefixInternal("",
n = vDbgPrintExWithPrefixInternal("",
-1,
DPFLTR_ERROR_LEVEL,
Format,
ap,
TRUE);
va_end(ap);
return n;
}
/*
@@ -225,17 +227,19 @@ DbgPrintEx(IN ULONG ComponentId,
IN PCCH Format,
...)
{
ULONG n;
va_list ap;
/* Call the internal routine that also handles ControlC */
va_start(ap, Format);
return vDbgPrintExWithPrefixInternal("",
n = vDbgPrintExWithPrefixInternal("",
ComponentId,
Level,
Format,
ap,
TRUE);
va_end(ap);
return n;
}
/*
@@ -246,16 +250,19 @@ __cdecl
DbgPrintReturnControlC(PCH Format,
...)
{
ULONG n;
va_list ap;
/* Call the internal routine that also handles ControlC */
va_start(ap, Format);
return vDbgPrintExWithPrefixInternal("",
n = vDbgPrintExWithPrefixInternal("",
-1,
DPFLTR_ERROR_LEVEL,
Format,
ap,
FALSE);
va_end(ap);
return n;
}
/*
+1 -1
View File
@@ -60,7 +60,7 @@ static int is_data_file_module( PVOID BaseAddress )
*/
int push_language( USHORT *list, ULONG pos, WORD lang )
{
int i;
ULONG i;
for (i = 0; i < pos; i++) if (list[i] == lang) return pos;
list[pos++] = lang;
return pos;
-2
View File
@@ -31,9 +31,7 @@
#include <reactos/helper.h>
#include <pseh/pseh.h>
#ifndef _MSC_VER
#include <intrin.h>
#endif
#endif /* RTL_H */
+8
View File
@@ -1,11 +1,19 @@
#include <precomp.h>
#include <math.h>
#if defined(__GNUC__)
#define FPU_DOUBLE(var) double var; \
__asm__ __volatile__( "fstpl %0;fwait" : "=m" (var) : )
#define FPU_DOUBLES(var1,var2) double var1,var2; \
__asm__ __volatile__( "fstpl %0;fwait" : "=m" (var2) : ); \
__asm__ __volatile__( "fstpl %0;fwait" : "=m" (var1) : )
#elif defined(_MSC_VER)
#define FPU_DOUBLE(var) double var; \
__asm { fstp [var] }; __asm { fwait };
#define FPU_DOUBLES(var1,var2) double var1,var2; \
__asm { fstp [var1] }; __asm { fwait }; \
__asm { fstp [var2] }; __asm { fwait };
#endif
/*
* @implemented
+2 -2
View File
@@ -594,7 +594,7 @@ int toupper(int c)
/*
* @implemented
*/
wchar_t towlower(wchar_t c)
wint_t towlower(wint_t c)
{
if (iswctype (c, _UPPER))
return (c - upalpha);
@@ -604,7 +604,7 @@ wchar_t towlower(wchar_t c)
/*
* @implemented
*/
wchar_t towupper(wchar_t c)
wint_t towupper(wint_t c)
{
if (iswctype (c, _LOWER))
return (c + upalpha);
+125 -64
View File
@@ -88,6 +88,48 @@ Ke386SanitizeDr(IN PVOID DrAddress,
}
#endif /* _M_IX86 */
#ifndef _M_ARM
PRKTHREAD
FORCEINLINE
KeGetCurrentThread(VOID)
{
#ifdef _M_IX86
/* Return the current thread */
return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread;
#elif defined (_M_AMD64)
return (PRKTHREAD)__readgsqword(FIELD_OFFSET(KIPCR, Prcb.CurrentThread));
#else
PKPRCB Prcb = KeGetCurrentPrcb();
return Prcb->CurrentThread;
#endif
}
UCHAR
FORCEINLINE
KeGetPreviousMode(VOID)
{
/* Return the current mode */
return KeGetCurrentThread()->PreviousMode;
}
#endif
VOID
FORCEINLINE
KeFlushProcessTb(VOID)
{
/* Flush the TLB by resetting CR3 */
#ifdef _M_PPC
__asm__("sync\n\tisync\n\t");
#elif _M_ARM
//
// We need to implement this!
//
ASSERTMSG("Need ARM flush routine\n", FALSE);
#else
__writecr3(__readcr3());
#endif
}
//
// Enters a Guarded Region
//
@@ -411,7 +453,10 @@ KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock)
{
#ifdef DBG
/* On debug builds, we use a much slower but useful routine */
Kii386SpinOnSpinLock(SpinLock, 5);
//Kii386SpinOnSpinLock(SpinLock, 5);
/* FIXME: Do normal yield for now */
YieldProcessor();
#else
/* Otherwise, just yield and keep looping */
YieldProcessor();
@@ -422,7 +467,7 @@ KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock)
{
#ifdef DBG
/* On debug builds, we OR in the KTHREAD */
*SpinLock = KeGetCurrentThread() | 1;
*SpinLock = (KSPIN_LOCK)KeGetCurrentThread() | 1;
#endif
/* All is well, break out */
break;
@@ -439,21 +484,21 @@ KxReleaseSpinLock(IN PKSPIN_LOCK SpinLock)
{
#ifdef DBG
/* Make sure that the threads match */
if ((KeGetCurrentThread() | 1) != *SpinLock)
if (((KSPIN_LOCK)KeGetCurrentThread() | 1) != *SpinLock)
{
/* They don't, bugcheck */
KeBugCheckEx(SPIN_LOCK_NOT_OWNED, SpinLock, 0, 0, 0);
KeBugCheckEx(SPIN_LOCK_NOT_OWNED, (ULONG_PTR)SpinLock, 0, 0, 0);
}
#endif
/* Clear the lock */
InterlockedAnd(SpinLock, 0);
InterlockedAnd((PLONG)SpinLock, 0);
}
KIRQL
VOID
FORCEINLINE
KiAcquireDispatcherObject(IN DISPATCHER_HEADER* Object)
{
LONG OldValue, NewValue;
LONG OldValue;
/* Make sure we're at a safe level to touch the lock */
ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL);
@@ -462,20 +507,23 @@ KiAcquireDispatcherObject(IN DISPATCHER_HEADER* Object)
do
{
/* Loop until the other CPU releases it */
while ((UCHAR)Object->Lock & KOBJECT_LOCK_BIT)
while (TRUE)
{
/* Check if it got released */
OldValue = Object->Lock;
if ((OldValue & KOBJECT_LOCK_BIT) == 0) break;
/* Let the CPU know that this is a loop */
YieldProcessor();
};
}
/* Try acquiring the lock now */
NewValue = InterlockedCompareExchange(&Object->Lock,
OldValue | KOBJECT_LOCK_BIT,
OldValue);
} while (NewValue != OldValue);
} while (InterlockedCompareExchange(&Object->Lock,
OldValue | KOBJECT_LOCK_BIT,
OldValue) != OldValue);
}
KIRQL
VOID
FORCEINLINE
KiReleaseDispatcherObject(IN DISPATCHER_HEADER* Object)
{
@@ -506,6 +554,22 @@ KiReleaseDispatcherLock(IN KIRQL OldIrql)
KiExitDispatcher(OldIrql);
}
VOID
FORCEINLINE
KiAcquireDispatcherLockAtDpcLevel(VOID)
{
/* Acquire the dispatcher lock */
KeAcquireQueuedSpinLockAtDpcLevel(LockQueueDispatcherLock);
}
VOID
FORCEINLINE
KiReleaseDispatcherLockFromDpcLevel(VOID)
{
/* Release the dispatcher lock */
KeReleaseQueuedSpinLockFromDpcLevel(LockQueueDispatcherLock);
}
//
// This routine inserts a thread into the deferred ready list of the given CPU
//
@@ -569,7 +633,7 @@ KiAcquirePrcbLock(IN PKPRCB Prcb)
for (;;)
{
/* Acquire the lock and break out if we acquired it first */
if (!InterlockedExchange(&Prcb->PrcbLock, 1)) break;
if (!InterlockedExchange((PLONG)&Prcb->PrcbLock, 1)) break;
/* Loop until the other CPU releases it */
do
@@ -595,7 +659,7 @@ KiReleasePrcbLock(IN PKPRCB Prcb)
ASSERT(Prcb->PrcbLock != 0);
/* Release it */
InterlockedAnd(&Prcb->PrcbLock, 0);
InterlockedAnd((PLONG)&Prcb->PrcbLock, 0);
}
//
@@ -616,7 +680,7 @@ KiAcquireThreadLock(IN PKTHREAD Thread)
for (;;)
{
/* Acquire the lock and break out if we acquired it first */
if (!InterlockedExchange(&Thread->ThreadLock, 1)) break;
if (!InterlockedExchange((PLONG)&Thread->ThreadLock, 1)) break;
/* Loop until the other CPU releases it */
do
@@ -639,7 +703,7 @@ VOID
KiReleaseThreadLock(IN PKTHREAD Thread)
{
/* Release it */
InterlockedAnd(&Thread->ThreadLock, 0);
InterlockedAnd((PLONG)&Thread->ThreadLock, 0);
}
FORCEINLINE
@@ -653,7 +717,7 @@ KiTryThreadLock(IN PKTHREAD Thread)
/* Otherwise, try to acquire it and check the result */
Value = 1;
Value = InterlockedExchange(&Thread->ThreadLock, &Value);
Value = InterlockedExchange((PLONG)&Thread->ThreadLock, Value);
/* Return the lock state */
return (Value == TRUE);
@@ -667,6 +731,16 @@ KiCheckDeferredReadyList(IN PKPRCB Prcb)
if (Prcb->DeferredReadyListHead.Next) KiProcessDeferredReadyList(Prcb);
}
FORCEINLINE
VOID
KiRundownThread(IN PKTHREAD Thread)
{
#if defined(_M_IX86) || defined(_M_AMD64)
/* FIXME: TODO */
ASSERTMSG("Not yet implemented\n", FALSE);
#endif
}
FORCEINLINE
VOID
KiRequestApcInterrupt(IN BOOLEAN NeedApc,
@@ -676,10 +750,10 @@ KiRequestApcInterrupt(IN BOOLEAN NeedApc,
if (NeedApc)
{
/* Check if it's on another CPU */
if (KeGetPcr()->Number != Cpu)
if (KeGetPcr()->Number != Processor)
{
/* Send an IPI to request delivery */
KiIpiSendRequest(AFFINITY_MASK(Cpu), IPI_DPC);
KiIpiSendRequest(AFFINITY_MASK(Processor), IPI_APC);
}
else
{
@@ -689,6 +763,36 @@ KiRequestApcInterrupt(IN BOOLEAN NeedApc,
}
}
FORCEINLINE
PKSPIN_LOCK_QUEUE
KiAcquireTimerLock(IN ULONG Hand)
{
PKSPIN_LOCK_QUEUE LockQueue;
ULONG LockIndex;
ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL);
/* Get the lock index */
LockIndex = Hand >> LOCK_QUEUE_TIMER_LOCK_SHIFT;
LockIndex &= (LOCK_QUEUE_TIMER_TABLE_LOCKS - 1);
/* Now get the lock */
LockQueue = &KeGetCurrentPrcb()->LockQueue[LockQueueTimerTableLock + LockIndex];
/* Acquire it and return */
KeAcquireQueuedSpinLockAtDpcLevel(LockQueue);
return LockQueue;
}
FORCEINLINE
VOID
KiReleaseTimerLock(IN PKSPIN_LOCK_QUEUE LockQueue)
{
ASSERT(KeGetCurrentIrql() >= DISPATCH_LEVEL);
/* Release the lock */
KeReleaseQueuedSpinLockFromDpcLevel(LockQueue);
}
#endif
FORCEINLINE
@@ -1525,46 +1629,3 @@ KiComputeNewPriority(IN PKTHREAD Thread,
/* Return the new priority */
return Priority;
}
#ifndef _M_ARM
PRKTHREAD
FORCEINLINE
KeGetCurrentThread(VOID)
{
#ifdef _M_IX86
/* Return the current thread */
return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread;
#elif defined (_M_AMD64)
return (PRKTHREAD)__readgsqword(FIELD_OFFSET(KIPCR, Prcb.CurrentThread));
#else
PKPRCB Prcb = KeGetCurrentPrcb();
return Prcb->CurrentThread;
#endif
}
UCHAR
FORCEINLINE
KeGetPreviousMode(VOID)
{
/* Return the current mode */
return KeGetCurrentThread()->PreviousMode;
}
#endif
VOID
FORCEINLINE
KeFlushProcessTb(VOID)
{
/* Flush the TLB by resetting CR3 */
#ifdef _M_PPC
__asm__("sync\n\tisync\n\t");
#elif _M_ARM
//
// We need to implement this!
//
ASSERTMSG("Need ARM flush routine\n", FALSE);
#else
__writecr3(__readcr3());
#endif
}
+5 -1
View File
@@ -398,6 +398,10 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
/* Check if we need to do an interrupt */
if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
/* Exit the dispatcher and return the old state */
KiExitDispatcher(OldIrql);
return Inserted;
}
/* Set the time as Absolute */
@@ -419,7 +423,7 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
Timer->Header.SignalState = FALSE;
KxInsertTimer(Timer, Hand);
/* Release Dispatcher Lock */
/* Exit the dispatcher */
KiExitDispatcher(OldIrql);
/* Return old state */
+3
View File
@@ -4644,18 +4644,21 @@ MmMapViewOfSection(IN PVOID SectionObject,
if ((Protect & (PAGE_READWRITE|PAGE_EXECUTE_READWRITE)) &&
!(Section->SectionPageProtection & (PAGE_READWRITE|PAGE_EXECUTE_READWRITE)))
{
MmUnlockAddressSpace(AddressSpace);
return STATUS_SECTION_PROTECTION;
}
/* check for read access */
if ((Protect & (PAGE_READONLY|PAGE_WRITECOPY|PAGE_EXECUTE_READ|PAGE_EXECUTE_WRITECOPY)) &&
!(Section->SectionPageProtection & (PAGE_READONLY|PAGE_READWRITE|PAGE_WRITECOPY|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY)))
{
MmUnlockAddressSpace(AddressSpace);
return STATUS_SECTION_PROTECTION;
}
/* check for execute access */
if ((Protect & (PAGE_EXECUTE|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY)) &&
!(Section->SectionPageProtection & (PAGE_EXECUTE|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY)))
{
MmUnlockAddressSpace(AddressSpace);
return STATUS_SECTION_PROTECTION;
}
+55 -7
View File
@@ -947,6 +947,9 @@ NtQueryVirtualMemory(IN HANDLE ProcessHandle,
NTSTATUS Status = STATUS_SUCCESS;
SIZE_T ResultLength = 0;
KPROCESSOR_MODE PreviousMode;
WCHAR ModuleFileNameBuffer[MAX_PATH] = {0};
UNICODE_STRING ModuleFileName;
PMEMORY_SECTION_NAME SectionName = NULL;
union
{
MEMORY_BASIC_INFORMATION BasicInfo;
@@ -985,13 +988,58 @@ NtQueryVirtualMemory(IN HANDLE ProcessHandle,
return STATUS_INVALID_PARAMETER;
}
Status = MiQueryVirtualMemory(ProcessHandle,
Address,
VirtualMemoryInformationClass,
&VirtualMemoryInfo,
Length,
&ResultLength );
/* FIXME: Move this inside MiQueryVirtualMemory */
if (VirtualMemoryInformationClass == MemorySectionName)
{
RtlInitEmptyUnicodeString(&ModuleFileName, ModuleFileNameBuffer, sizeof(ModuleFileNameBuffer));
Status = MmGetFileNameForAddress(Address, &ModuleFileName);
if (NT_SUCCESS(Status))
{
SectionName = VirtualMemoryInformation;
if (PreviousMode != KernelMode)
{
_SEH_TRY
{
RtlInitUnicodeString(&SectionName->SectionFileName, SectionName->NameBuffer);
SectionName->SectionFileName.MaximumLength = Length;
RtlCopyUnicodeString(&SectionName->SectionFileName, &ModuleFileName);
if (UnsafeResultLength != NULL)
{
*UnsafeResultLength = ModuleFileName.Length;
}
}
_SEH_HANDLE
{
Status = _SEH_GetExceptionCode();
}
_SEH_END;
}
else
{
RtlInitUnicodeString(&SectionName->SectionFileName, SectionName->NameBuffer);
SectionName->SectionFileName.MaximumLength = Length;
RtlCopyUnicodeString(&SectionName->SectionFileName, &ModuleFileName);
if (UnsafeResultLength != NULL)
{
*UnsafeResultLength = ModuleFileName.Length;
}
}
}
return Status;
}
else
{
Status = MiQueryVirtualMemory(ProcessHandle,
Address,
VirtualMemoryInformationClass,
&VirtualMemoryInfo,
Length,
&ResultLength);
}
if (NT_SUCCESS(Status))
{
if (PreviousMode != KernelMode)
+2 -2
View File
@@ -2,7 +2,7 @@
<!DOCTYPE module SYSTEM "../tools/rbuild/project.dtd">
<module name="ntoskrnl" type="kernel" installbase="system32" installname="ntoskrnl.exe" baseaddress="0xfffff80000800000" entrypoint="KiSystemStartup" allowwarnings="true">
<bootstrap installbase="$(CDOUTPUT)" />
<importlibrary definition="ntoskrnl.spec" />
<importlibrary definition="ntoskrnl.pspec" />
<define name="_DISABLE_TIDENTS" />
<define name="__NTOSKRNL__" />
<define name="_NTOSKRNL_" />
@@ -483,7 +483,7 @@
<file>wmi.c</file>
</directory>
<file>ntoskrnl.rc</file>
<file>ntoskrnl.spec</file>
<file>ntoskrnl.pspec</file>
<linkerscript>ntoskrnl_$(ARCH).lnk</linkerscript>
</module>
+2 -2
View File
@@ -2,7 +2,7 @@
<!DOCTYPE module SYSTEM "../tools/rbuild/project.dtd">
<group xmlns:xi="http://www.w3.org/2001/XInclude">
<bootstrap installbase="$(CDOUTPUT)" />
<importlibrary definition="ntoskrnl.spec" />
<importlibrary definition="ntoskrnl.pspec" />
<define name="_DISABLE_TIDENTS" />
<define name="__NTOSKRNL__" />
<define name="_NTOSKRNL_" />
@@ -466,6 +466,6 @@
<file>wmi.c</file>
</directory>
<file>ntoskrnl.rc</file>
<file>ntoskrnl.spec</file>
<file>ntoskrnl.pspec</file>
<linkerscript>ntoskrnl_$(ARCH).lnk</linkerscript>
</group>
File diff suppressed because it is too large Load Diff
@@ -2167,6 +2167,7 @@ NtGdiSelectBrush(
if (pBrush == NULL)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
DC_UnlockDc(pDC);
return NULL;
}
@@ -2174,6 +2175,7 @@ NtGdiSelectBrush(
BRUSHOBJ_UnlockBrush(pBrush);
if(bFailed)
{
DC_UnlockDc(pDC);
return NULL;
}
+151 -2
View File
@@ -1,2 +1,151 @@
/* EMPTY FOR NOW */
/* Hope I didn't delete existing defs!! Check CVS version of this file.. */
/*
* PROJECT: ReactOS win32 kernel mode subsystem
* LICENSE: GPL - See COPYING in the top level directory
* FILE: subsystems/win32/win32k/objects/font.c
* PURPOSE: Font
* PROGRAMMER:
*/
/** Includes ******************************************************************/
#include <w32k.h>
#define NDEBUG
#include <debug.h>
//
// FIXME PLEASE!!!!
// Why are these here? Well there is a problem with drivers/directx.
// 1st: It does not belong there.
// 2nd: Due to being placed outside Win32k build environment, it creates
// compiling issues.
// Until svn mv drivers/directx subsystem/win32/win32k/drivers/directx,
// it will not get fixed.
//
ULONG
FASTCALL
ftGdiGetGlyphOutline(
IN PDC pdc,
IN WCHAR wch,
IN UINT iFormat,
OUT LPGLYPHMETRICS pgm,
IN ULONG cjBuf,
OUT OPTIONAL PVOID UnsafeBuf,
IN LPMAT2 pmat2,
IN BOOL bIgnoreRotation);
INT
FASTCALL
IntGetOutlineTextMetrics(PFONTGDI FontGDI, UINT Size, OUTLINETEXTMETRICW *Otm);
/** Functions ******************************************************************/
ULONG
APIENTRY
NtGdiGetGlyphOutline(
IN HDC hdc,
IN WCHAR wch,
IN UINT iFormat,
OUT LPGLYPHMETRICS pgm,
IN ULONG cjBuf,
OUT OPTIONAL PVOID UnsafeBuf,
IN LPMAT2 pmat2,
IN BOOL bIgnoreRotation)
{
ULONG Ret;
PDC dc;
dc = DC_LockDc(hdc);
if (!dc)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return GDI_ERROR;
}
Ret = ftGdiGetGlyphOutline( dc,
wch,
iFormat,
pgm,
cjBuf,
UnsafeBuf,
pmat2,
bIgnoreRotation);
DC_UnlockDc(dc);
return Ret;
}
DWORD
STDCALL
NtGdiGetKerningPairs(HDC hDC,
ULONG NumPairs,
LPKERNINGPAIR krnpair)
{
UNIMPLEMENTED;
return 0;
}
/*
From "Undocumented Windows 2000 Secrets" Appendix B, Table B-2, page
472, this is NtGdiGetOutlineTextMetricsInternalW.
*/
ULONG
STDCALL
NtGdiGetOutlineTextMetricsInternalW (HDC hDC,
ULONG Data,
OUTLINETEXTMETRICW *otm,
TMDIFF *Tmd)
{
PDC dc;
PDC_ATTR Dc_Attr;
PTEXTOBJ TextObj;
PFONTGDI FontGDI;
HFONT hFont = 0;
ULONG Size;
OUTLINETEXTMETRICW *potm;
NTSTATUS Status;
dc = DC_LockDc(hDC);
if (dc == NULL)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return 0;
}
Dc_Attr = dc->pDc_Attr;
if(!Dc_Attr) Dc_Attr = &dc->Dc_Attr;
hFont = Dc_Attr->hlfntNew;
TextObj = TEXTOBJ_LockText(hFont);
DC_UnlockDc(dc);
if (TextObj == NULL)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return 0;
}
FontGDI = ObjToGDI(TextObj->Font, FONT);
TEXTOBJ_UnlockText(TextObj);
Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
if (!otm) return Size;
if (Size > Data)
{
SetLastWin32Error(ERROR_INSUFFICIENT_BUFFER);
return 0;
}
potm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
if (NULL == potm)
{
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return 0;
}
IntGetOutlineTextMetrics(FontGDI, Size, potm);
if (otm)
{
Status = MmCopyToCaller(otm, potm, Size);
if (! NT_SUCCESS(Status))
{
SetLastWin32Error(ERROR_INVALID_PARAMETER);
ExFreePool(potm);
return 0;
}
}
ExFreePool(potm);
return Size;
}
/* EOF */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -161,6 +161,8 @@
<file>dibobj.c</file>
<file>drawing.c</file>
<file>fillshap.c</file>
<file>font.c</file>
<file>freetype.c</file>
<file>gdibatch.c</file>
<file>gdiobj.c</file>
<file>icm.c</file>
@@ -183,7 +185,7 @@
</directory>
</module>
<module name="win32k" type="kernelmodedriver" installbase="system32" installname="win32k.sys" allowwarnings="true">
<importlibrary definition="win32k.spec" />
<importlibrary definition="win32k.pspec" />
<library>win32k_base</library>
<library>pseh</library>
<library>ntoskrnl</library>
@@ -685,7 +685,7 @@ CBBackend::_generate_cbproj ( const Module& module )
#if 0
if ( dll )
{
if (IsWineModule( module ))
if (IsSpecDefinitionFile( module ))
fprintf ( OUT, "\t\t\t\t\t<Add before=\"%s\\tools\\winebuild\\winebuild.exe -o %s --def -E %s.spec\" />\r\n", outdir.c_str(), module.importLibrary->definition.c_str(), module.name.c_str());
fprintf ( OUT, "\t\t\t\t\t<Add before=\"dlltool --dllname %s --def %s --output-exp %s.temp.exp %s\" />\r\n", module.GetTargetName ().c_str(), module.importLibrary->definition.c_str(), module.name.c_str(), module.mangledSymbols ? "" : "--kill-at" );
fprintf ( OUT, "\t\t\t\t\t<Add after=\"%s\\tools\\pefixup $exe_output -exports\" />\r\n", outdir.c_str() );
@@ -902,11 +902,11 @@ CBBackend::_lookup_property ( const Module& module, const std::string& name ) co
}
bool
CBBackend::IsWineModule ( const Module& module ) const
CBBackend::IsSpecDefinitionFile ( const Module& module ) const
{
if ( module.importLibrary == NULL)
return false;
size_t index = module.importLibrary->source->name.rfind ( ".spec.def" );
size_t index = module.importLibrary->source->name.rfind ( ".spec" );
return ( index != string::npos );
}
@@ -74,7 +74,7 @@ class CBBackend : public Backend
std::string DependFileName ( const Module& module ) const;
std::string GenerateProjectLinkerFlags () const;
void MingwAddImplicitLibraries( Module &module );
bool IsWineModule ( const Module& module ) const;
bool IsSpecDefinitionFile ( const Module& module ) const;
std::vector<CBConfiguration*> m_configurations;
std::vector<FileUnit> m_fileUnits;
@@ -416,13 +416,13 @@ MingwModuleHandler::GetObjectFilename (
if ( module.type == BootSector )
return new FileLocation ( *module.output );
else if ( extension == ".rc" || extension == ".RC" )
else if (extension == ".rc")
newExtension = "_" + module.name + ".coff";
else if ( extension == ".mc" || extension == ".MC" )
else if (extension == ".mc")
newExtension = ".rc";
else if ( extension == ".spec" || extension == ".SPEC" )
else if (extension == ".spec" || extension == ".pspec")
newExtension = "_" + module.name + ".stubs.o";
else if ( extension == ".idl" || extension == ".IDL" )
else if (extension == ".idl")
{
if ( module.type == RpcServer )
newExtension = "_s.o";
@@ -1056,28 +1056,28 @@ Rule wmcRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).rc",
"$(INTERMEDIATE)$(SEP)include$(SEP)reactos$(SEP)$(source_name_noext).h",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildKMDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t${gcc} -xc -E $(source) -I. > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).spec.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildKMRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c:\n"
"\t${cp} $(NUL) $@ 1>$(NUL)\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).spec.def --def -E $(source)\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).spec.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildPDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t${gcc} -xc -E $(source) -I. > $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildPRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c:\n"
"\t${cp} $(NUL) $@ 1>$(NUL)\n"
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o: $(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c$(dependencies) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_CC)\n"
"\t${gcc} -o $@ $($(module_name)_CFLAGS)$(compiler_flags) -c $<\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.c",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).stubs.o",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildDefRule ( "$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def: $(source)$(dependencies) $(WINEBUILD_TARGET) | $(INTERMEDIATE)$(SEP)$(source_dir)\n"
"\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).auto.def --def -E $(source)\n\n",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext).spec",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)$(source_name_noext)_$(module_name).auto.def",
"$(INTERMEDIATE)$(SEP)$(source_dir)$(SEP)", NULL );
Rule winebuildRule ( "$(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c: $(source_path)$(SEP)$(source_name_noext).spec $(WINEBUILD_TARGET)\n"
"\t$(ECHO_WINEBLD)\n"
"\t$(Q)$(WINEBUILD_TARGET) $(WINEBUILD_FLAGS) -o $(INTERMEDIATE)$(SEP)$(source_path)$(SEP)$(source_name_noext)_$(module_name).stubs.c --pedll $(source_path)$(SEP)$(source_name_noext).spec\n"
@@ -1256,8 +1256,7 @@ MingwModuleHandler::GenerateCommands (
{ HostDontCare, TypeDontCare, ".asm", &nasmRule },
{ HostDontCare, TypeDontCare, ".rc", &windresRule },
{ HostDontCare, TypeDontCare, ".mc", &wmcRule },
{ HostFalse, Kernel, ".spec", &winebuildKMRule },
{ HostFalse, KernelModeDLL, ".spec", &winebuildKMRule },
{ HostDontCare, TypeDontCare, ".pspec", &winebuildPRule },
{ HostDontCare, TypeDontCare, ".spec", &winebuildRule },
{ HostDontCare, RpcServer, ".idl", &widlServerRule },
{ HostDontCare, RpcClient, ".idl", &widlClientRule },
@@ -1856,7 +1855,7 @@ MingwModuleHandler::GenerateOtherMacros ()
used_defs );
}
if ( IsWineModule() )
if ( IsSpecDefinitionFile() )
{
vector<FileLocation> s;
GetSpecImplibDependencies ( s, module.importLibrary->source );
@@ -1988,6 +1987,8 @@ MingwModuleHandler::GenerateOtherMacros ()
void
MingwModuleHandler::GenerateRules ()
{
SpecFileType spec;
fprintf ( fMakefile, "# RULES\n" );
string targetMacro = GetTargetMacro ( module );
//CLEAN_FILE ( targetMacro );
@@ -2015,12 +2016,15 @@ MingwModuleHandler::GenerateRules ()
delete ar_target;
}
if ( IsWineModule() )
spec = IsSpecDefinitionFile();
if(spec)
{
Rule * defRule;
if ( module.type == Kernel || module.type == KernelModeDLL || module.type == KernelModeDriver )
defRule = &winebuildKMDefRule;
if (spec == PSpec)
defRule = &winebuildPDefRule;
else
defRule = &winebuildDefRule;
@@ -2172,14 +2176,19 @@ MingwModuleHandler::GeneratePreconditionDependencies ()
fprintf ( fMakefile, "\n" );
}
bool
MingwModuleHandler::IsWineModule () const
SpecFileType
MingwModuleHandler::IsSpecDefinitionFile () const
{
if ( module.importLibrary == NULL)
return false;
if(!module.importLibrary)
return None;
size_t index = module.importLibrary->source->name.rfind ( ".spec" );
return ( index != string::npos );
if(module.importLibrary->source->name.rfind(".spec") != string::npos)
return Spec;
if(module.importLibrary->source->name.rfind(".pspec") != string::npos)
return PSpec;
return None;
}
/* caller needs to delete the returned object */
@@ -2189,11 +2198,11 @@ MingwModuleHandler::GetDefinitionFilename () const
if ( module.importLibrary == NULL )
return NULL;
if ( IsWineModule () )
if ( IsSpecDefinitionFile () )
{
return new FileLocation ( IntermediateDirectory,
module.importLibrary->source->relative_path,
GetBasename ( module.importLibrary->source->name ) + "_" + module.name + ".spec.def" );
GetBasename ( module.importLibrary->source->name ) + "_" + module.name + ".auto.def" );
}
else
{
@@ -2268,7 +2277,7 @@ MingwModuleHandler::GetSpecImplibDependencies (
{
dependencies.push_back ( FileLocation ( IntermediateDirectory,
file->relative_path,
GetBasename ( file->name ) + "_" + module.name + ".spec.def" ) );
GetBasename ( file->name ) + "_" + module.name + ".auto.def" ) );
}
void
@@ -2316,9 +2325,11 @@ MingwModuleHandler::GetDefinitionDependencies (
const CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if ( extension == ".spec" || extension == ".SPEC" )
if (extension == ".spec" || extension == ".pspec")
GetSpecObjectDependencies ( dependencies, &sourceFile );
if ( extension == ".idl" || extension == ".IDL" )
if (extension == ".idl")
{
if ( ( module.type == RpcServer ) || ( module.type == RpcClient ) || ( module.type == RpcProxy ) )
GetWidlObjectDependencies ( dependencies, &sourceFile );
@@ -32,6 +32,13 @@ PrefixFilename (
const std::string& filename,
const std::string& prefix );
enum SpecFileType
{
None,
Spec = 1,
PSpec = 2
};
class MingwModuleHandler
{
public:
@@ -150,7 +157,7 @@ private:
const FileLocation *file ) const;
void GetDefaultDependencies ( string_list& dependencies ) const;
void GetInvocationDependencies ( const Module& module, string_list& dependencies );
bool IsWineModule () const;
SpecFileType IsSpecDefinitionFile () const;
const FileLocation* GetDefinitionFilename () const;
void GenerateBuildNonSymbolStrippedCode ();
void CleanupCompilationUnitVector ( std::vector<CompilationUnit*>& compilationUnits );
+1 -1
View File
@@ -77,7 +77,7 @@ CompilationUnit::IsGeneratedFile () const
return false;
const File* file = files[0];
string extension = GetExtension ( file->file );
return ( extension == ".spec" || extension == ".SPEC" || extension == ".mc" || extension == ".MC");
return ( extension == ".spec" || extension == ".pspec" || extension == ".mc");
}
bool