possibility of on-phone xap deployment

Search This thread

hjc4869

Senior Member
Jul 31, 2012
52
54
Wuhan
ID_CAP_PM_1ST_PARTY
ID_CAP_PM_BSS
ID_CAP_PM_INSTALL
I noiced these three capabilities after wp8 interop unlock and it might be able to install xap by calling PacManClient.dll .
the only problem is that, I am not quite familiar with this dll. Although it might be similar with that in wp7, I didn't develop anything about wp7(I'm quite new here).
maybe we can add these caps and try LoadLibraryEx() to call the dll?
 

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,933
Seattle
I'm sure it's possible. We just need to know the relevant APIs. It may be necessary to reverse engineer the XAP-installation service on the phone to see how it works. Anyhow, yes, this is something I've been wanting to get working as well.
 

spavlin

Senior Member
Dec 26, 2006
321
643
pacmanserver.dll :

Code:
I D _ C A P _ P M _ 1 S T _ P A R T Y
   I D _ C A P _ D E B U G _ F O L D E R S
I D _ C A P _ E N T E R P R I S E _ E N R O L L M E N T
     I D _ C A P _ P M _ B S S
   I D _ C A P _ P M _ I N S T A L L
S e c u r i t y V a l i d a t o r < 1 > : : C h e c k P e r m i s s i o n F o r P M D e b u g A P I
S o f t w a r e \ M i c r o s o f t \ P a c k a g e M a n a g e r \ B l a c k l i s t
S o f t w a r e \ M i c r o s o f t \ P a c k a g e M a n a g e r
   F o r c e C h e c k A p p B i n d i n g     I s X A P A u t h o r i z e d   a p p s . g a m e s     N I
     G e t D e c r y p t e d X a p P a t h   0   f a l s e   1   t r u e     { 5 B 0 4 B 7 7 5 - 3 5 6 B - 4 A A 0 - A A F 8 - 6 4 9 1 F F E A 5 6 6 1 }
     S y s t e m \ M a p s   { 5 B 0 4 B 7 7 5 - 3 5 6 B - 4 A A 0 - A A F 8 - 6 4 9 1 F F E A 5 6 8 3 }
     S o f t w a r e \ P a r t n e r \ W a l l e t   O E M D i s a b l e d 
  S o f t w a r e \ M i c r o s o f t \ D e v i c e R e g \ I n s t a l l 
    G e t M a x C o u n t F o r D e p l o y e d A p p   M a x U n s i g n e d A p p     G e t P r o H e a d e r F r o m X a p   W M A p p P R H e a d e r . x m l
   c : \ d a t a \ P R O G R A M S     I n s t a l l   J u n k     T e m p I n s t a l l   X B F   X B F T E M P   T e m p N I     I n s t a l l e r   F l u s h F i l e C o n t e n t s

I D _ H W _ F R O N T C A M E R A
   I D _ C A P _ N E T W O R K I N G
I D _ C A P _ D E V E L O P E R U N L O C K
     I D _ C A P _ D E B U G
     I D _ C A P _ D E B U G _ N A V I G A T I O N
   % W i n D i r % \ S y s t e m 3 2 \ T a s k H o s t . e x e     % W i n D i r % \ S y s t e m 3 2 \ H e a d l e s s H o s t . e x e     % W i n D i r % \ S y s t e m 3 2 \ X b f G e n e r a t o r . e x e     % W i n D i r % \ S y s t e m 3 2 \ M D I L B i n d e r . e x e         C : \ D a t a \ S h a r e d D a t a \ P h o n e T o o l s \ 1 1 . 0 \ D e b u g g e r \ b i n \ R e m o t e D e b u g g e r \ M S V S M O N . e x e     s r c \ b a s e o s \ p r o d \ s e c u r i t y m o d e l \ p r o v i s i o n \ r u n t i m e \ m a r k e t p l a c e a p p l i c a t i o n \ m a r k e t p l a c e a p p l i c a t i o n . c p p       F a i l u r e   a t   l i n e   % i   i n   f i l e   % s ,   E r r C o d e = 0 x % 0 8 x 
     M i c r o s o f t \ S e c u r i t y M a n a g e r \ C a p a b i l i t i e s     A p p l i c a t i o n C a p a b i l i t y S I D     E m b e d d e d W i n d o w s C a p a b i l i t y S I D s   R e q u i r e d C a p a b i l i t i e s     P r i v i l e g e s     T h u m b p r i n t C N G H a s h A l g I d     T h u m b p r i n t     S H A 1 T h u m b p r i n t     E n c o d e d   S i g n e r C e r t i f i c a t e   E n t e r p r i s e I d     I n t e r m e d i a t e C e r t i f i c a t e 
      P R I N C I P A L _ C L A S S _ I S V _ D E V E L O P E R _ U N L O C K
         P R I N C I P A L _ C L A S S _ O E M _ D E V E L O P E R _ U N L O C K     A p p l i c a t i o n B i n a r i e s
   I D _ C A P _ E V E R Y O N E
   I D _ C A P _ B U I L T I N _ D E F A U L T
         M i c r o s o f t \ S e c u r i t y M a n a g e r \ A p p l i c a t i o n s     A p p l i c a t i o n T y p e   A p p l i c a t i o n S i d     D e f A p p s   A p p l i c a t i o n A c c o u n t     R e q u i r e d C a p a b i l i t y S I D s     R e q u i r e d P r i v i l e g e s

C : \ W i n d o w s \ S y s t e m 3 2 \ P a c m a n t h . d l l
I D _ C A P _ I N T E R O P S E R V I C E S
     I D _ C A P _ O E M P U B L I C D I R E C T O R Y
   M a n i f e s t P a r s e r : : P a r s e M a n i f e s t   H a r d w a r e C o n f i g L i b   IsHardwareOnDevice
  I D _ R E Q _ M E M O R Y _ 9 0
 
  • Like
Reactions: darxon

hks25258

Member
Feb 7, 2013
15
68
Hainan Haikou
This is the COM Object Interface Class
use PacManClient.dll->DllGetClassObject()->NdrDllGetClassObject()->RPCRT4->PacManServer execute.

PMServiceCLSID = {B9E511FC-E364-497A-A121-B7B3612CEDCE}

IPMTilePropertyInfo IPMBackgroundWorkerInfo IPMTileNotification IPMLiveTileJobInfo IPMTilePropertyEnumerator IPMTileInfo IPMTaskInfo IPMExtensionProtocolInfo IPMBnsNotification IPMNotificationsSink IPMLicenseManager IPMTileInfoEnumerator IPMExtensionFileExtensionInfo IPMBackgroundServiceAgentInfoEnumerator IPMExtensionInfo IPMLiveTileJobInfoEnumerator IPMExtensionInfoEnumerator IPMApplicationInfo IPMApplicationInfoEnumerator IPMNotificationManager IPMLifeCycleNotification IPMEnumerationManager IPMBssManager IPMBackgroundServiceAgentInfo IPMTileManager IPMBssWriter IPMInternal IPMBackgroundWorkerInfoEnumerator IPMTaskInfoEnumerator IPMDeploymentManager IPMBssNotificationEnumerator IPMLiveTileJobManager

for LiveTile(form ILSpy)
IPMEnumerationManager = {698D57C2-292D-4CF3-B73C-D95A6922ED9A}
IPMLiveTileJobManager = {15E673FD-0497-4cb3-97CB-99E698DD3B66}
IPMLiveTileJobInfo = {6009A81F-4710-4697-B5F6-2208F6057B8E}
IPMTileInfoEnumerator = {DED83065-E462-4b2c-ACB5-E39CEA61C874}
IPMTileInfo = {D1604833-2B08-4001-82CD-183AD734F752}
IPMTileManager = {D622EEDE-5363-41fc-91C3-88E321191A34}
IPMTilePropInfo = {6C2B8017-1EFA-42a7-86C0-6D4B640BF528}

class IPMEnumerationManager:public IUnknown
{
public:
virtual void __stdcall _thunk_get_AllApplications();
virtual HRESULT __stdcall get_AllTiles(IPMTileInfoEnumerator** ppTileEnum,DWORD dwFilter);
virtual void __stdcall _thunk_get_AllTasks();
virtual void __stdcall _thunk_get_AllExtensions();
virtual void __stdcall _thunk_get_AllBackgroundServiceAgents();
virtual void __stdcall _thunk_get_AllBackgroundWorkers();
virtual void __stdcall _thunk_get_ApplicationInfo();
virtual HRESULT __stdcall get_TileInfo(const GUID& ProductID,LPWSTR lpszTileID,IPMTileInfo** ppTileInfo);
virtual void __stdcall _thunk_get_AllApplications();
.....................
}

i try use CoCreateInstance to create this class interface, but return error, class not found.
 
Last edited:
  • Like
Reactions: hjc4869 and ngame

ultrashot

Inactive Recognized Developer
May 26, 2009
1,478
2,046
St.Petersburg
Code:
typedef struct
{
    GUID productID;
    BSTR packagePath;
    GUID instanceID;
    BYTE *licenseData;
    DWORD licenseLength;
    BOOL disableUninstallation;
    BOOL preInstallationFlag;
    GUID offerID;
    BSTR storeAppVersion;
}PM_INSTALLINFO;

typedef struct _tagPM_UPDATEINFO
{
    GUID productID;
    BSTR path;
    GUID instanceID;
    BYTE *licenseData;
    DWORD licenseLength;
    BSTR storeAppVersion;
}PM_UPDATEINFO;

35F785FA-1979-4A8B-BC8F-FD70EB0D1544
class IPMDeploymentManager : public IUnknown
{
    public:
        virtual HRESULT ReportDownloadBegin(GUID productID) = 0;
        virtual HRESULT ReportDownloadProgress(GUID productID, USHORT pogress) = 0;
        virtual HRESULT ReportDownloadComplete(GUID productID, HRESULT hr) = 0;
        virtual HRESULT BeginInstall(PM_INSTALLINFO *installInfo) = 0;
        virtual HRESULT BeginUpdate(PM_UPDATEINFO *updateInfo) = 0;
        virtual HRESULT BeginDeployPackage(PM_INSTALLINFO *installInfo) = 0;
        virtual HRESULT BeginUpdateDeployedPackage(PM_UPDATEINFO *updateInfo) = 0;
        virtual HRESULT BeginUninstall(GUID productID) = 0;
        virtual HRESULT BeginEnterpriseAppInstall(PM_INSTALLINFO *installInfo) = 0;
        virtual HRESULT BeginEnterpriseAppUpdate(PM_UPDATEINFO *updateInfo) = 0;
        virtual HRESULT BeginUpdateLicense(GUID productID, BYTE *licenseData, DWORD licenseLength) = 0;
        virtual HRESULT GetLicenseChallenge(...) = 0;
        virtual HRESULT GetLicenseChallengeByproductID(...) = 0;
        virtual HRESULT GetLicenseChallengeByproductID2(...) = 0;
        virtual HRESULT RevokeLicense(GUID productID) = 0;
        virtual HRESULT RebindMdilBinaries(GUID productID, ...) = 0;
        virtual HRESULT RebindAllMdilBinaries(GUID productID, GUID instanceID) = 0;
        virtual HRESULT RegenerateXbf(GUID productID, ...) = 0;
        virtual HRESULT BeginProvision(GUID productID, ...) = 0;
        virtual HRESULT BeginDeprovision(GUID productID) = 0;
        virtual HRESULT ReindexSQLCEDatabases(GUID productID) = 0;
        virtual HRESULT SetApplicationsNeedMaintenance(...) = 0;
};
where args are omitted - there I just wanted to avoid complexity or dependencies
 

Top Liked Posts

  • There are no posts matching your filters.
  • 5
    Code:
    typedef struct
    {
        GUID productID;
        BSTR packagePath;
        GUID instanceID;
        BYTE *licenseData;
        DWORD licenseLength;
        BOOL disableUninstallation;
        BOOL preInstallationFlag;
        GUID offerID;
        BSTR storeAppVersion;
    }PM_INSTALLINFO;
    
    typedef struct _tagPM_UPDATEINFO
    {
        GUID productID;
        BSTR path;
        GUID instanceID;
        BYTE *licenseData;
        DWORD licenseLength;
        BSTR storeAppVersion;
    }PM_UPDATEINFO;
    
    35F785FA-1979-4A8B-BC8F-FD70EB0D1544
    class IPMDeploymentManager : public IUnknown
    {
        public:
            virtual HRESULT ReportDownloadBegin(GUID productID) = 0;
            virtual HRESULT ReportDownloadProgress(GUID productID, USHORT pogress) = 0;
            virtual HRESULT ReportDownloadComplete(GUID productID, HRESULT hr) = 0;
            virtual HRESULT BeginInstall(PM_INSTALLINFO *installInfo) = 0;
            virtual HRESULT BeginUpdate(PM_UPDATEINFO *updateInfo) = 0;
            virtual HRESULT BeginDeployPackage(PM_INSTALLINFO *installInfo) = 0;
            virtual HRESULT BeginUpdateDeployedPackage(PM_UPDATEINFO *updateInfo) = 0;
            virtual HRESULT BeginUninstall(GUID productID) = 0;
            virtual HRESULT BeginEnterpriseAppInstall(PM_INSTALLINFO *installInfo) = 0;
            virtual HRESULT BeginEnterpriseAppUpdate(PM_UPDATEINFO *updateInfo) = 0;
            virtual HRESULT BeginUpdateLicense(GUID productID, BYTE *licenseData, DWORD licenseLength) = 0;
            virtual HRESULT GetLicenseChallenge(...) = 0;
            virtual HRESULT GetLicenseChallengeByproductID(...) = 0;
            virtual HRESULT GetLicenseChallengeByproductID2(...) = 0;
            virtual HRESULT RevokeLicense(GUID productID) = 0;
            virtual HRESULT RebindMdilBinaries(GUID productID, ...) = 0;
            virtual HRESULT RebindAllMdilBinaries(GUID productID, GUID instanceID) = 0;
            virtual HRESULT RegenerateXbf(GUID productID, ...) = 0;
            virtual HRESULT BeginProvision(GUID productID, ...) = 0;
            virtual HRESULT BeginDeprovision(GUID productID) = 0;
            virtual HRESULT ReindexSQLCEDatabases(GUID productID) = 0;
            virtual HRESULT SetApplicationsNeedMaintenance(...) = 0;
    };
    where args are omitted - there I just wanted to avoid complexity or dependencies
    3
    ID_CAP_PM_1ST_PARTY
    ID_CAP_PM_BSS
    ID_CAP_PM_INSTALL
    I noiced these three capabilities after wp8 interop unlock and it might be able to install xap by calling PacManClient.dll .
    the only problem is that, I am not quite familiar with this dll. Although it might be similar with that in wp7, I didn't develop anything about wp7(I'm quite new here).
    maybe we can add these caps and try LoadLibraryEx() to call the dll?
    3
    Actually, installation of XAPs isn't a problem at all. I wanted to do that, but got a bit bored with rebuilding OS on my engineering AtivS, so I delayed this project.
    2
    Just sharing the function prototypes and usage info would probably be enough for somebody else to do it... doesn't have to be fancy!
    2
    This is the COM Object Interface Class
    use PacManClient.dll->DllGetClassObject()->NdrDllGetClassObject()->RPCRT4->PacManServer execute.

    PMServiceCLSID = {B9E511FC-E364-497A-A121-B7B3612CEDCE}

    IPMTilePropertyInfo IPMBackgroundWorkerInfo IPMTileNotification IPMLiveTileJobInfo IPMTilePropertyEnumerator IPMTileInfo IPMTaskInfo IPMExtensionProtocolInfo IPMBnsNotification IPMNotificationsSink IPMLicenseManager IPMTileInfoEnumerator IPMExtensionFileExtensionInfo IPMBackgroundServiceAgentInfoEnumerator IPMExtensionInfo IPMLiveTileJobInfoEnumerator IPMExtensionInfoEnumerator IPMApplicationInfo IPMApplicationInfoEnumerator IPMNotificationManager IPMLifeCycleNotification IPMEnumerationManager IPMBssManager IPMBackgroundServiceAgentInfo IPMTileManager IPMBssWriter IPMInternal IPMBackgroundWorkerInfoEnumerator IPMTaskInfoEnumerator IPMDeploymentManager IPMBssNotificationEnumerator IPMLiveTileJobManager

    for LiveTile(form ILSpy)
    IPMEnumerationManager = {698D57C2-292D-4CF3-B73C-D95A6922ED9A}
    IPMLiveTileJobManager = {15E673FD-0497-4cb3-97CB-99E698DD3B66}
    IPMLiveTileJobInfo = {6009A81F-4710-4697-B5F6-2208F6057B8E}
    IPMTileInfoEnumerator = {DED83065-E462-4b2c-ACB5-E39CEA61C874}
    IPMTileInfo = {D1604833-2B08-4001-82CD-183AD734F752}
    IPMTileManager = {D622EEDE-5363-41fc-91C3-88E321191A34}
    IPMTilePropInfo = {6C2B8017-1EFA-42a7-86C0-6D4B640BF528}

    class IPMEnumerationManager:public IUnknown
    {
    public:
    virtual void __stdcall _thunk_get_AllApplications();
    virtual HRESULT __stdcall get_AllTiles(IPMTileInfoEnumerator** ppTileEnum,DWORD dwFilter);
    virtual void __stdcall _thunk_get_AllTasks();
    virtual void __stdcall _thunk_get_AllExtensions();
    virtual void __stdcall _thunk_get_AllBackgroundServiceAgents();
    virtual void __stdcall _thunk_get_AllBackgroundWorkers();
    virtual void __stdcall _thunk_get_ApplicationInfo();
    virtual HRESULT __stdcall get_TileInfo(const GUID& ProductID,LPWSTR lpszTileID,IPMTileInfo** ppTileInfo);
    virtual void __stdcall _thunk_get_AllApplications();
    .....................
    }

    i try use CoCreateInstance to create this class interface, but return error, class not found.