суббота, 30 октября 2010 г.

lsm.exe RPC interfaces

Тут граждане пытаются описать всякие новые RPC интерфейсы, появившиеся в висте, но конкретно этих я там не нашел. Все интерфейсы висят на LPC port LSMApi
TermSrvPrivate 11F25515-C879-400A-989E-B074D5F092FE version 1.0
6 methods:
  •  RpcGetUserToken
  •  RpcConnectTerminal
  •  RpcSystemShutdownStarted
  •  RpcGetRequestForWinlogon
  •  RpcReportWinlogonReply
  •  RpcGetReconnectId
TermSrvAdmin 1E665584-40FE-4450-8F6E-802362399694 version 1.0
2 methods:
  •  RpcBroadcastSystemMessage
  •  RpcSendWindowMessage
TermSrvSession 484809D6-4239-471B-B5BC-61DF8C23AC48 version 1.0
0x10 methods:
  •  RpcOpenSession
  •  RpcCloseSession
  •  RpcConnect
  •  RpcDisconnect
  •  RpcLogoff
  •  RpcGetUserName
  •  RpcGetTerminalName
  •  RpcGetState
  •  RpcIsSessionDesktopLocked
  •  RpcShowMessageBox
  •  RpcGetTimes
  •  RpcGetSessionCounters
  •  RpcGetSessionInformation
  •  RpcSwitchToServicesSession
  •  RpcRevertFromServicesSession
  •  RpcGetLoggedOnCount
TermSrvNotification 11899A43-2B68-4A76-92E3-A3D6AD8C26CE version 1.0
4 methods:
  •  RpcWaitForSessionState
  •  RpcRegisterAsyncNotification
  •  RpcWaitAsyncNotification
  •  RpcUnRegisterAsyncNotification
TermSrvEnumeration 88143FD0-C28D-4B2B-8FEF-8D882F6A9390 version 1.0
0xa methods:
  •  RpcOpenEnum
  •  RpcCloseEnum
  •  RpcFilterByState
  •  RpcFilterByCallersName
  •  RpcEnumAddFilter
  •  RpcGetEnumResult
  •  RpcFilterBySessionType
  •  RpcFilterByLicenseType
  •  RpcGetSessionIds
  •  RpcGetEnumResultEx

4 комментария:

  1. Подскажи пожалуйста, нет ли у тебя какой информации по интерфейсам IGlassTerminal, ITSSession, ISessionList в lsm.exe Windows 7?
    Я вижу что вызов метода этого интерфейса идет в отладчике вот так:
    kd> k
    ChildEBP RetAddr
    00b5ee04 75b4fc8f lsm!CTSSession::Start
    00b5ee20 75bb4c53 RPCRT4!Invoke+0x2a
    00b5f228 755ed936 RPCRT4!NdrStubCall2+0x2d6
    00b5f270 755ed9c6 ole32!CStdStubBuffer_Invoke+0xb6
    00b5f2b8 755edf1f ole32!SyncStubInvoke+0x3c
    00b5f304 7550213c ole32!StubInvoke+0xb9
    00b5f3e0 75502031 ole32!CCtxComChnl::ContextInvoke+0xfa
    00b5f3fc 755ea754 ole32!MTAInvoke+0x1a
    00b5f42c 755edcbb ole32!AppInvoke+0xab
    00b5f50c 755ea773 ole32!ComInvokeWithLockAndIPID+0x372
    00b5f558 75b4f34a ole32!ThreadInvoke+0x302
    00b5f594 75b4f4da RPCRT4!DispatchToStubInCNoAvrf+0x4a
    00b5f5ec 75b4f3c6 RPCRT4!RPC_INTERFACE::DispatchToStubWorker+0x16c
    00b5f614 75b50cef RPCRT4!RPC_INTERFACE::DispatchToStub+0x8b
    00b5f64c 75b4f882 RPCRT4!RPC_INTERFACE::DispatchToStubWithObject+0xb2
    00b5f698 75b4f7a4 RPCRT4!LRPC_SCALL::DispatchRequest+0x23b
    00b5f6b8 75b4f763 RPCRT4!LRPC_SCALL::QueueOrDispatchCall+0xbd
    00b5f6d4 75b4f5ff RPCRT4!LRPC_SCALL::HandleRequest+0x34f
    00b5f708 75b4f573 RPCRT4!LRPC_SASSOCIATION::HandleRequest+0x144
    00b5f740 75b4ee4f RPCRT4!LRPC_ADDRESS::HandleRequest+0xbd
    00b5f7b8 75b4ece7 RPCRT4!LRPC_ADDRESS::ProcessIO+0x50a
    00b5f7c4 75b51357 RPCRT4!LrpcServerIoHandler+0x16
    00b5f7d4 76eed3c7 RPCRT4!LrpcIoComplete+0x16
    00b5f7fc 76ef0778 ntdll!TppAlpcpExecuteCallback+0x1c5
    00b5f964 77061194 ntdll!TppWorkerThread+0x5a4
    00b5f970 76f1b495 kernel32!BaseThreadInitThunk+0xe
    00b5f9b0 76f1b468 ntdll!__RtlUserThreadStart+0x70
    00b5f9c8 00000000 ntdll!_RtlUserThreadStart+0x1b


    Но не понимаю кто его вызывает (это еще ладно) но как мне его вызвать самому?

    ОтветитьУдалить
  2. я не понял вопроса
    ты что именно хочешь вызвать ?
    если именно описанные rpc интерфейсы - то через протокол ncalrpc на порт LSMApi (скорее всего там авторизация потребуется)
    если ole interfaces - то все как обычно - создаешь объект по CLSID через ClassFactory и все

    ОтветитьУдалить
  3. Соорудил пока такой код:

    DEFINE_GUID(CLSID_PSFactoryBuffer, 0x02E6EC4C,0x96E4,0x42E8,0x0B5,0x33,0x33,0x69,0x16,0x0A0,0x08,0x7D);
    DEFINE_GUID(IID_ITSSession, 0xA1B7DE7A, 0x4E77, 0x43DB, 0x0AE, 0x78, 0x96, 0x0FC, 0x18, 0x2F, 0x0ED, 0x4A);

    int _tmain(int argc, _TCHAR* argv[])
    {
    CoInitializeEx(NULL, COINIT_MULTITHREADED);

    HRESULT hr;
    PVOID pITSSession;


    hr = CoCreateInstance ( CLSID_PSFactoryBuffer, // CLSID of coclass

    NULL, // not used - aggregation

    CLSCTX_INPROC_SERVER ,

    IID_ITSSession, // IID of interface

    (void**) &pITSSession ); // Pointer to our interface pointer


    if ( SUCCEEDED ( hr ) )
    {

    }
    else
    {

    }

    CoUninitialize();

    }

    возвращает E_NOINTERFACE. Может быть есть какие идеи?

    ОтветитьУдалить
  4. есть
    каком модуле живет ITSSession ?
    если в отдельной .dll - приведенный кусок должен работать
    если в .exe - то нужно вместо CLSCTX_INPROC_SERVER использовать CLSCTX_LOCAL_SERVER
    Также еще проверь правильность всех использованных IIDs

    ОтветитьУдалить