mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 23:15:39 +00:00
Sync to trunk revision 63875.
svn path=/branches/condrv_restructure/; revision=63876
This commit is contained in:
parent
73cdd53b1d
commit
de799f57dc
6 changed files with 41 additions and 33 deletions
|
@ -1098,7 +1098,7 @@ CabinetExtractFile(PCAB_SEARCH Search)
|
||||||
Size -= OutputLength;
|
Size -= OutputLength;
|
||||||
/* reduce remaining block size by bytes consumed */
|
/* reduce remaining block size by bytes consumed */
|
||||||
RemainingBlock -= InputLength;
|
RemainingBlock -= InputLength;
|
||||||
if (RemainingBlock == 0)
|
if (Size > 0 && RemainingBlock == 0)
|
||||||
{
|
{
|
||||||
/* used up this block, move on to the next */
|
/* used up this block, move on to the next */
|
||||||
DPRINT("Out of block data\n");
|
DPRINT("Out of block data\n");
|
||||||
|
|
|
@ -1120,7 +1120,7 @@ static void PointerFree(PMIDL_STUB_MESSAGE pStubMsg,
|
||||||
* BufferStart and BufferEnd won't be reset when allocating memory for
|
* BufferStart and BufferEnd won't be reset when allocating memory for
|
||||||
* sending the response. we don't have to check for the new buffer here as
|
* sending the response. we don't have to check for the new buffer here as
|
||||||
* it won't be used a type memory, only for buffer memory */
|
* it won't be used a type memory, only for buffer memory */
|
||||||
if (Pointer >= pStubMsg->BufferStart && Pointer < pStubMsg->BufferEnd)
|
if (Pointer >= pStubMsg->BufferStart && Pointer <= pStubMsg->BufferEnd)
|
||||||
goto notfree;
|
goto notfree;
|
||||||
|
|
||||||
if (attr & RPC_FC_P_ONSTACK) {
|
if (attr & RPC_FC_P_ONSTACK) {
|
||||||
|
|
|
@ -1431,20 +1431,17 @@ HRESULT WINAPI CFSFolder::Drop(IDataObject *pDataObject,
|
||||||
_DoDropData *data = static_cast<_DoDropData*>(HeapAlloc(GetProcessHeap(), 0, sizeof(_DoDropData)));
|
_DoDropData *data = static_cast<_DoDropData*>(HeapAlloc(GetProcessHeap(), 0, sizeof(_DoDropData)));
|
||||||
data->This = this;
|
data->This = this;
|
||||||
// Need to maintain this class in case the window is closed or the class exists temporarily (when dropping onto a folder).
|
// Need to maintain this class in case the window is closed or the class exists temporarily (when dropping onto a folder).
|
||||||
|
pDataObject->AddRef();
|
||||||
|
pAsyncOperation->StartOperation(NULL);
|
||||||
|
CoMarshalInterThreadInterfaceInStream(IID_IDataObject, pDataObject, &data->pStream);
|
||||||
this->AddRef();
|
this->AddRef();
|
||||||
data->pDataObject = pDataObject;
|
|
||||||
data->pAsyncOperation = pAsyncOperation;
|
|
||||||
data->dwKeyState = dwKeyState;
|
data->dwKeyState = dwKeyState;
|
||||||
data->pt = pt;
|
data->pt = pt;
|
||||||
// Need to dereference as pdweffect gets freed.
|
// Need to dereference as pdweffect gets freed.
|
||||||
data->pdwEffect = *pdwEffect;
|
data->pdwEffect = *pdwEffect;
|
||||||
data->pDataObject->AddRef();
|
|
||||||
data->pAsyncOperation->StartOperation(NULL);
|
|
||||||
SHCreateThread(CFSFolder::_DoDropThreadProc, data, NULL, NULL);
|
SHCreateThread(CFSFolder::_DoDropThreadProc, data, NULL, NULL);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
pAsyncOperation->Release();
|
|
||||||
}
|
}
|
||||||
return this->_DoDrop(pDataObject, dwKeyState, pt, pdwEffect);
|
return this->_DoDrop(pDataObject, dwKeyState, pt, pdwEffect);
|
||||||
}
|
}
|
||||||
|
@ -1745,12 +1742,22 @@ HRESULT WINAPI CFSFolder::_DoDrop(IDataObject *pDataObject,
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) {
|
DWORD WINAPI CFSFolder::_DoDropThreadProc(LPVOID lpParameter) {
|
||||||
|
CoInitialize(NULL);
|
||||||
_DoDropData *data = static_cast<_DoDropData*>(lpParameter);
|
_DoDropData *data = static_cast<_DoDropData*>(lpParameter);
|
||||||
HRESULT hr = data->This->_DoDrop(data->pDataObject, data->dwKeyState, data->pt, &data->pdwEffect);
|
IDataObject *pDataObject;
|
||||||
|
HRESULT hr = CoGetInterfaceAndReleaseStream (data->pStream, IID_IDataObject, (void**) &pDataObject);
|
||||||
|
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
CComPtr<IAsyncOperation> pAsyncOperation;
|
||||||
|
hr = data->This->_DoDrop(pDataObject, data->dwKeyState, data->pt, &data->pdwEffect);
|
||||||
|
if (SUCCEEDED(pDataObject->QueryInterface(IID_PPV_ARG(IAsyncOperation, &pAsyncOperation))))
|
||||||
|
{
|
||||||
|
pAsyncOperation->EndOperation(hr, NULL, data->pdwEffect);
|
||||||
|
}
|
||||||
|
pDataObject->Release();
|
||||||
|
}
|
||||||
//Release the CFSFolder and data object holds in the copying thread.
|
//Release the CFSFolder and data object holds in the copying thread.
|
||||||
data->pAsyncOperation->EndOperation(hr, NULL, data->pdwEffect);
|
|
||||||
data->pAsyncOperation->Release();
|
|
||||||
data->pDataObject->Release();
|
|
||||||
data->This->Release();
|
data->This->Release();
|
||||||
//Release the parameter from the heap.
|
//Release the parameter from the heap.
|
||||||
HeapFree(GetProcessHeap(), 0, data);
|
HeapFree(GetProcessHeap(), 0, data);
|
||||||
|
|
|
@ -123,8 +123,7 @@ class CFSFolder :
|
||||||
|
|
||||||
struct _DoDropData {
|
struct _DoDropData {
|
||||||
CFSFolder *This;
|
CFSFolder *This;
|
||||||
IDataObject *pDataObject;
|
IStream *pStream;
|
||||||
IAsyncOperation *pAsyncOperation;
|
|
||||||
DWORD dwKeyState;
|
DWORD dwKeyState;
|
||||||
POINTL pt;
|
POINTL pt;
|
||||||
DWORD pdwEffect;
|
DWORD pdwEffect;
|
||||||
|
|
|
@ -170,7 +170,11 @@ InstallBuiltinAccounts(VOID)
|
||||||
|
|
||||||
for (i = 0; i < 10; i++)
|
for (i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid);
|
if (!ConvertStringSidToSid(BuiltinAccounts[i], &AccountSid))
|
||||||
|
{
|
||||||
|
DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", BuiltinAccounts[i], GetLastError());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Status = LsaCreateAccount(PolicyHandle,
|
Status = LsaCreateAccount(PolicyHandle,
|
||||||
AccountSid,
|
AccountSid,
|
||||||
|
@ -277,7 +281,11 @@ InstallPrivileges(VOID)
|
||||||
}
|
}
|
||||||
DPRINT("SID: %S\n", szSidString);
|
DPRINT("SID: %S\n", szSidString);
|
||||||
|
|
||||||
ConvertStringSidToSid(szSidString, &AccountSid);
|
if (!ConvertStringSidToSid(szSidString, &AccountSid))
|
||||||
|
{
|
||||||
|
DPRINT1("ConvertStringSidToSid(%S) failed: %lu\n", szSidString, GetLastError());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Status = LsaOpenAccount(PolicyHandle,
|
Status = LsaOpenAccount(PolicyHandle,
|
||||||
AccountSid,
|
AccountSid,
|
||||||
|
|
|
@ -315,28 +315,22 @@ FindRemoveAsyncMsg(PWND Wnd, WPARAM wParam)
|
||||||
|
|
||||||
pti = Wnd->head.pti;
|
pti = Wnd->head.pti;
|
||||||
|
|
||||||
if (!IsListEmpty(&pti->SentMessagesListHead))
|
Entry = pti->SentMessagesListHead.Flink;
|
||||||
|
while (Entry != &pti->SentMessagesListHead)
|
||||||
{
|
{
|
||||||
// Scan sent queue messages to see if we received async messages.
|
// Scan sent queue messages to see if we received async messages.
|
||||||
Entry = pti->SentMessagesListHead.Flink;
|
|
||||||
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
|
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
|
||||||
do
|
Entry = Entry->Flink;
|
||||||
{
|
|
||||||
if (IsListEmpty(Entry)) return;
|
|
||||||
if (!Message) return;
|
|
||||||
Entry = Message->ListEntry.Flink;
|
|
||||||
|
|
||||||
if (Message->Msg.message == WM_ASYNC_SETACTIVEWINDOW &&
|
if (Message->Msg.message == WM_ASYNC_SETACTIVEWINDOW &&
|
||||||
Message->Msg.hwnd == UserHMGetHandle(Wnd) &&
|
Message->Msg.hwnd == UserHMGetHandle(Wnd) &&
|
||||||
Message->Msg.wParam == wParam )
|
Message->Msg.wParam == wParam)
|
||||||
{
|
{
|
||||||
ERR("ASYNC SAW: Found one in the Sent Msg Queue! %p Activate/Deactivate %d\n", Message->Msg.hwnd,!!wParam);
|
ERR("ASYNC SAW: Found one in the Sent Msg Queue! %p Activate/Deactivate %d\n", Message->Msg.hwnd, !!wParam);
|
||||||
RemoveEntryList(&Message->ListEntry); // Purge the entry.
|
RemoveEntryList(&Message->ListEntry); // Purge the entry.
|
||||||
ExFreePoolWithTag(Message, TAG_USRMSG);
|
ClearMsgBitsMask(pti, Message->QS_Flags);
|
||||||
}
|
ExFreePoolWithTag(Message, TAG_USRMSG);
|
||||||
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
|
|
||||||
}
|
}
|
||||||
while (Entry != &pti->SentMessagesListHead);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue