From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/prntvpt.spec | 2 +- dlls/prntvpt/ticket.c | 41 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec index 7bc2163082a..4e8ed25dbc0 100644 --- a/dlls/prntvpt/prntvpt.spec +++ b/dlls/prntvpt/prntvpt.spec @@ -8,7 +8,7 @@ @ stdcall PTConvertPrintTicketToDevMode(ptr ptr long long ptr ptr ptr) @ stdcall PTConvertDevModeToPrintTicket(ptr long ptr long ptr) @ stdcall PTReleaseMemory(ptr) -@ stub ConvertDevModeToPrintTicketThunk2 +@ stdcall ConvertDevModeToPrintTicketThunk2(ptr ptr long long ptr ptr) @ stub ConvertDevModeToPrintTicketThunk @ stub ConvertPrintTicketToDevModeThunk2 @ stub ConvertPrintTicketToDevModeThunk diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index a2c1f446d75..9989b6edf70 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -1237,6 +1237,47 @@ HRESULT WINAPI PTConvertDevModeToPrintTicket(HPTPROVIDER provider, ULONG size, P return write_ticket(stream, &ticket, scope); }
+HRESULT WINAPI ConvertDevModeToPrintTicketThunk2(HPTPROVIDER provider, BYTE *dm, ULONG size, + EPrintTicketScope scope, BYTE **ticket, INT *length) +{ + HRESULT hr; + IStream *stream; + + TRACE("%p,%p,%lu,%d,%p,%p\n", provider, dm, size, scope, ticket, length); + + if (!is_valid_provider(provider) || !dm || !ticket || !length) + return E_INVALIDARG; + + hr = CreateStreamOnHGlobal(0, TRUE, &stream); + if (hr != S_OK) return hr; + + hr = PTConvertDevModeToPrintTicket(provider, size, (DEVMODEW *)dm, scope, stream); + if (hr == S_OK) + { + HGLOBAL hmem; + DWORD mem_size; + + hr = GetHGlobalFromStream(stream, &hmem); + if (hr == S_OK) + { + mem_size = GlobalSize(hmem); + *ticket = CoTaskMemAlloc(mem_size); + if (*ticket) + { + BYTE *p = GlobalLock(hmem); + memcpy(*ticket, p, mem_size); + GlobalUnlock(hmem); + *length = mem_size; + } + else + hr = E_OUTOFMEMORY; + } + } + + IStream_Release(stream); + return hr; +} + HRESULT WINAPI PTMergeAndValidatePrintTicket(HPTPROVIDER provider, IStream *base, IStream *delta, EPrintTicketScope scope, IStream *result, BSTR *error) {